springboot 集成 log4j,log4j配置不同包不同日志输出级别(按包输出不同级别日志)

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() 即可,无需再次声明。)


版权声明:本文为weixin_36908494原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。