slf4j

How to log exception and message with placeholders with SLF4J

匆匆过客 提交于 2021-01-20 14:42:27
问题 What's the correct approach to log both an error message and an exception using SLF4J? I've tried doing this but the exception stack trace is never printed: logger.error("Unable to parse data {}", inputMessage, e); In this case I want to populate {} with the inputMessage as well as logging out the exception stacktrace. The only way I can see to do this would be to do this: logger.error("Unable to parse data " + inputMessage, e); which is not pretty. 回答1: As of SLF4J version 1.6, SLF4J will

MyBatis-Plus使用(1)-概述+代码生成器

瘦欲@ 提交于 2021-01-20 07:42:26
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 官网: https://mp.baomidou.com/ AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。 参考文档: https://mybatis.plus/guide/generator.html MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖: < dependency > < groupId > com.baomidou </ groupId > < artifactId > mybatis-plus-generator </ artifactId > < version > 3.2.0 </ version > </ dependency > 2.*的版本要引用这个依赖: < dependency > < groupId > com.baomidou </ groupId > < artifactId > mybatis-plus </ artifactId > <

高级开发必须理解的Java中SPI机制

霸气de小男生 提交于 2021-01-17 02:57:50
本文通过探析JDK提供的,在开源项目中比较常用的Java SPI机制,希望给大家在实际开发实践、学习开源项目提供参考。 1 SPI是什么 SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。 整体机制图如下: Java SPI 实际上是“ 基于接口的编程+策略模式+配置文件 ”组合实现的动态加载机制。 系统设计的各个抽象,往往有很多不同的实现方案,在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。 Java SPI就是提供这样的一个机制:为某个接口寻找服务实现的机制。有点类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要。所以SPI的核心思想就是 解耦 。 2 使用场景 概括地说,适用于: 调用者根据实际使用需要,启用、扩展、或者替换框架的实现策略 比较常见的例子: 数据库驱动加载接口实现类的加载 JDBC加载不同类型数据库的驱动 日志门面接口实现类加载 SLF4J加载不同提供商的日志实现类 Spring Spring中大量使用了SPI,比如:对servlet3

springboot2.1中添加过滤器配置

匆匆过客 提交于 2021-01-15 19:12:21
1:构造一个实现 Filter 接口的过滤器,并在类上添加@component注释: notice1:若不添加,则需在spring中注入该bean,不然会报错。 package com.dev.filter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import javax.servlet.* ; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.* ; /** * Created by zgq7 on 2019/6/6. */ @Component public class BaseFilter implements Filter { private static final Logger log = LoggerFactory.getLogger(BaseFilter. class ); @Override public void init(FilterConfig

测试文章

感情迁移 提交于 2021-01-14 20:06:00
@Slf4j public class MyTest { public static void main(String args[]) { log.info("这是一个测试相关!!"); } } 来源: oschina 链接: https://my.oschina.net/hoofungson/blog/4899459

小白学习如何打日志

社会主义新天地 提交于 2021-01-14 08:01:34
一、Java打日志的基础 以前自己自学的时候,排查问题只会写下面的代码: try { // doSomething } catch ( Exception e ) { e . printStackTrace (); } ---------- // 查看某个数据的值时: System . out . println ( xxxx ); 去到公司就发现上面的代码全不见了,剩下的是: LOGGER . info ( "begin to run Java3y:{}" , id ); ---- LOGGER . error ( "excepiton occurs when run Java3y {}, exception{}" , id , e . toString ()); 如果使用 e.printStackTrace(); 的话,打印在控制的信息分析不方便: 而我们将信息分等级和时间记录在服务器的磁盘上,有问题了就可以根据对应的信息去查找相关的日志(这样排查起来是十分方便的): 我们再来看一下一般的日志长什么样的 例如:现在有人来反馈某某某用户好像收不到短信,给出发送时间和用户ID,我们就可以在日志上找出该用户在我们系统的发送状态(例如图上的:state:81,我们就认为是发送成功状态) 那么,问题来了,我们在哪打日志?《手册》上其实已经给出了答案: 谨慎地记录日志。生产环境禁止输出

小白入门学习打日志

守給你的承諾、 提交于 2021-01-14 07:44:08
前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star: https://github.com/ZhongFuCheng3y/3y 记得之前写过一篇:《阿里巴巴 Java开发手册》读后感,之前自学时由于没怎么接触过打“日志”,所以《手册》中的“日志规约”我就先放一边去了。 而之前写了一篇:在公司做的项目和自己在学校做的有什么区别?中就有提到:公司的项目不会有e.printStackTrace();这种代码的存在。因为这打印出来的错误信息没有日期、等级等等,分析起来不方便。 在工作中去服务器上查日志又是一个非常非常常见的操作,所以当初我又写了一篇 工作中常用到的Linux命令,里边就谈到了查日志时常用的Linux命令。 想着,既然接触日志也有一段时间了,不妨在回看《手册》,看看有什么要注意的地方,于是就有了这篇笔记。 一、Java打日志的基础 以前自己自学的时候,排查问题只会写下面的代码: try { // doSomething } catch (Exception e) { e.printStackTrace(); } ---------- // 查看某个数据的值时: System.out.println(xxxx); 去到公司就发现上面的代码全不见了,剩下的是: LOGGER.info("begin to run Java3y:{}", id); ----

【Maven】2.使用Nexus3搭建Maven私服+上传第三方jar包到本地maven仓库

送分小仙女□ 提交于 2021-01-12 04:24:24
参考文章: http://www.cnblogs.com/luotaoyeah/p/3791966.html ------------------------------------------------------------------------------------------------------------------------------------------------------------------ 参考文章介绍的非常详尽,自己写下来这个,只是以做笔记的形式走一走自己的历程,人笨,还是记下来的好。 ===================================================================================================== 1.搭建Maven私服背景 公司还是按捺不住,要搭建一个自己的Maven本地仓库,可以让开发人员down架包,从内网还是快很多。 这样公司的maven本地仓库就是 开发人员自己电脑上的maven仓库 和 Maven远程仓库 之间的一个缓冲仓库。 那要构建一个maven私服,需要用到Maven仓库管理软件,关于Apache Archiva,Artifactory,Sonatype Nexus的区别,有下面这些的参考对比: http://blog.sina

JVM学习系列学习七

扶醉桌前 提交于 2021-01-10 08:45:58
5:实战:内存溢出的定位与分析 内存溢出在日常工作中,这个错误很容易遇到。遇到内存溢出,首先我们需要快速定位内存溢出的环节(位置),需要进行分析,看看是正常情况还是非正常情况。如果是正常情况,这个时候我们需要加大内存。如果是非正常情况,就需要对我们的程序进行修改,来修复这个问题。 首先,我们需要学会如何定位问题,然后在对问题进行分析,如何定位问题?这里我们可以借助于jmap与MAT工具进行分析。 5.1:模拟内存溢出 场景: 我们向list集合中添加100W个字符串,每个字符串再由100个UUID组成。如果可以正常执行,最后打印出OK。 /** * Created by kaigejava on 2019/7/3. * 模拟内存溢出的 */ @Slf4j public class TestJvmOutOfMemory { /** * 内存溢出 */ @Test public void jvmOutOfMemoryTest(){ List<Object> list = new ArrayList<>(); for ( int i = 0 ; i < 10000000 ; i++) { System. out .println(i); String str = "" ; for ( int j = 0 ; j < 1000 ; j++) { str += UUID.

springboot 整合kafka

戏子无情 提交于 2021-01-09 18:02:18
本文介绍如何在springboot项目中集成kafka收发message。 1、先解决依赖 springboot相关的依赖我们就不提了,和kafka相关的只依赖一个spring-kafka集成包 <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>1.1.1.RELEASE</version> </dependency> 这里我们先把配置文件展示一下 #============== kafka =================== kafka.consumer.zookeeper.connect=10.93.21.21:2181 kafka.consumer.servers=10.93.21.21:9092 kafka.consumer.enable.auto.commit=true kafka.consumer.session.timeout=6000 kafka.consumer.auto.commit.interval=100 kafka.consumer.auto.offset.reset=latest kafka.consumer.topic=test kafka.consumer.group.id=test