【日志】slf4j与log4j使用

目录

前言

配置:

1.在pom.xml中添加依赖

2.log4j.properties

3.log4j.xml配置:

测试:

3个依赖的介绍:


 


前言

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>

 

配置:

1.在pom.xml中添加依赖

(前两个不添加也可以,直接写这个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包:

2.log4j.properties

#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

3.log4j.xml配置:

请看博客: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");
    }
}

发现控制台输出:

打印出来的日志文件如下:

3个依赖的介绍:

①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,达到最终日志的输出。