1. POM文件配置
<!--排除springboot默认的logback依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${spring.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--引入springboot-log4j starter依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.3.8.RELEASE</version>
</dependency>
2.log4j.propertie 文件配置
log4j.rootLogger=INFO, Appender1, Appender2
log4j.appender.Appender1=org.apache.log4j.ConsoleAppender
log4j.appender.Appender1.layout=org.apache.log4j.PatternLayout
log4j.appender.Appender1.layout.ConversionPattern=%-7p %d [%t] %c %x - %m%n
log4j.appender.Appender2=org.apache.log4j.FileAppender
log4j.appender.Appender2.File=test-log0712.log
log4j.appender.Appender2.layout=org.apache.log4j.PatternLayout
log4j.appender.Appender2.layout.ConversionPattern=%-7p %d [%t] %c %x - %m%n
配置文件各项说明请见 log4j配置项说明
3. 代码应用
这时候我们启动项目,控制台就会出现以下日志:
我们发现,控制台只输出了 info 级别的日志,这是因为我们在 log4j.properties 配置文件中配置了
log4j.rootLogger=INFO, Appender1, Appender2
其中,INFO 就代表了日志输出级别,那我们将此项改成
log4j.rootLogger=DEBUG, Appender1, Appender2
再次运行程序,控制台输出如下:
我们发现,虽然我们打印的 info 和 debug 级别的日志均输出了,但是随之而来的还有一大堆框架里的dubug日志,这会非常影响我们的开发效率,所以我们需要根据不同的包配置不同的日志输出级别,例如Spring框架的日志,我们就输出 info或者 error 级别的日志,我们自己开发的代码,在调试的时候就输出 debug 级别的日志。那么该如何配置呢?
在 log4j.properties 配置文件中:
# rootLogger 我们可以理解成根日志,如果没有单独配置其他包的日志级别,默认情况下,所有的包都按照此级别输出日志。
log4j.rootLogger=debug, Appender1, Appender2
我们可以增加自定义包的日志级别配置,格式如下:
# XXX 是包名,level是日志级别
log4j.logger.XXX=level
例如我们配置如下:
log4j.rootLogger=debug, Appender1, Appender2
log4j.logger.com.rising.testlog=debug
我们的主程序在 com.rising.testlog 包下,此时我们运行主程序,查看控制台日志输出:
此时我们发现,日志按照我们预期的目标输出了,Spring框架的只输出了 info 级别的日志,我们自己定义的“com.rising.testlog“包下输出的是 debug 级别的日志。
4. 更优雅的使用 log
按照上面的配置,那么我们在每个需要使用log的类中都需要增加一行如下代码:
private static Logger log = LoggerFactory.getLogger(XXX.class);
那么有没有更简单的方式呢?
有的,那就是使用注解 @SLF4J
4.1 如何使用
4.1.1 pom文件引入依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
</dependency>
4.1.2 代码中进行注解配置
我们将 private static Logger log = LoggerFactory.getLogger(TestLogApplication.class);
代码注释掉,在类上标注 @SLF4j注解即可(注,@Slf4j 默认引入了名称为 log 的日志对象,所以直接使用 log.info() | log.debug() 即可,无需再次声明。)