目录
slf4j仅仅是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,所以单独的slf4j是不能工作的,必须搭配其他具体的日志实现方案,比如log4j或者log4j2,要在系统中使用slf4j。
如果不想每次都写private final Logger logger = LoggerFactory.getLogger(XXX.class);
可以在方法前用注解@Slf4j,然后直接使用log.info去打印日志。
如果注解@Slf4j注入后找不到变量log,那就给IDE安装lombok插件(idea中:1、File → settings → Plugins, 然后点击“Browse repositories”;2、输入 lombok 搜索插件, 点install安装,安装完重启idea)除此之外还要在pom文件中添加依赖
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.4</version> </dependency>
(前两个不添加也可以,直接写这个slf4j-log4j12其他的两个依赖也会下载下来):
<!-- log start --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency> <!-- log end -->
此时会自动添加3个jar包:
#root log4j.rootLogger=INFO,CONSOLE,file,warnFile,errorFile log4j.additivity.org.apache=true # CONSOLE log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Threshold=info log4j.appender.CONSOLE.Target=System.out log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d %-5p %l %t |- %m%n #file log4j.appender.file=org.apache.log4j.DailyRollingFileAppender log4j.appender.file.DatePattern=yyyyMMdd log4j.appender.file.Append = true log4j.appender.file.File=../logs/logtest-all.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d %-5p %l %t |- %m%n #warn-file log4j.additivity.warnFile=false log4j.appender.warnFile=org.apache.log4j.DailyRollingFileAppender log4j.appender.warnFile.Threshold=warn log4j.appender.warnFile.DatePattern=yyyyMMdd log4j.appender.warnFile.Append = true log4j.appender.warnFile.File=../logs/logtest-warn.log log4j.appender.warnFile.layout=org.apache.log4j.PatternLayout log4j.appender.warnFile.layout.ConversionPattern=%d %-5p %l %t |- %m%n #error-file log4j.additivity.errorFile=false log4j.appender.errorFile=org.apache.log4j.DailyRollingFileAppender log4j.appender.errorFile.Threshold=error log4j.appender.errorFile.DatePattern=yyyyMMdd log4j.appender.errorFile.Append = true log4j.appender.errorFile.File=../logs/logtest-error.log log4j.appender.errorFile.layout=org.apache.log4j.PatternLayout log4j.appender.errorFile.layout.ConversionPattern=%d %-5p %l %t |- %m%n #dubbo log4j.logger.com.alibaba.dubbo=ERROR log4j.logger.org.springframework.jdbc.datasource=ERROR ##p6spy log4j.additivity.p6spy=false log4j.logger.p6spy=info,spyConsole,file,p6spyfile log4j.appender.spyConsole=org.apache.log4j.ConsoleAppender log4j.appender.spyConsole.Target=System.out log4j.appender.spyConsole.layout=org.apache.log4j.PatternLayout log4j.appender.spyConsole.layout.ConversionPattern=######%m%n log4j.appender.p6spyfile=org.apache.log4j.DailyRollingFileAppender log4j.appender.p6spyfile.DatePattern=yyyyMMdd log4j.appender.p6spyfile.Append = true log4j.appender.p6spyfile.File=../logs/logtest-sql.log log4j.appender.p6spyfile.layout=org.apache.log4j.PatternLayout log4j.appender.p6spyfile.layout.ConversionPattern=######%m%n ##xxl-job log4j.additivity.com.xxl.job.core=false log4j.logger.com.xxl.job.core=ERROR log4j.logger.com.xxl.rpc=ERROR
请看博客:https://blog.csdn.net/jingyuwang1/article/details/49430233
public class logtest { private final Logger log = LoggerFactory.getLogger(logtest.class); @Test public void test1(){ System.out.println("llll"); log.info("info"); log.warn("warn"); log.error("error"); } }
发现控制台输出:
打印出来的日志文件如下:
①slf4j-api作为日志接入的接口。
compile时slf4j-api中public final class LoggerFactor类中private final static void bind()方法会寻找具体的日志实现类绑定,主要通过StaticLoggerBinder.getSingleton()的语句调用。
②slf4j-log4j12是链接slf4j-api和log4j中间的适配器。
它实现了slf4j-api中StaticLoggerBinder接口,从而使得在编译时绑定的是slf4j-log4j12的getSingleton()方法
③log4j是具体的日志系统。
通过slf4j-log4j12初始化Log4j,达到最终日志的输出。