浅谈log4j的rootLogger及其他坑爹的地方

作者:brad2309 时间:2023-07-31 02:23:14 

log4j的rootLogger及其他坑爹地方

这里用的是org.apache.log4j.Logger


log4j.rootLogger=error, stdout
log4j.appender.appenderName=org.apache.log4j.AsyncAppender

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
#only time no date.outfile1 has date

log4j.logger.com.ht=info,outfile1
log4j.appender.outfile1=org.apache.log4j.RollingFileAppender
log4j.appender.outfile1.File=log/ht.log
log4j.appender.outfile1.MaxFileSize=100MB
log4j.appender.outfile1.MaxBackupIndex=50
log4j.appender.outfile1.layout=org.apache.log4j.PatternLayout
log4j.appender.outfile1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n

log4j.logger.com.ht.log=info,outfile2
log4j.appender.outfile2=org.apache.log4j.RollingFileAppender
log4j.appender.outfile2.File=log/ht2.log
log4j.appender.outfile2.MaxFileSize=100MB
log4j.appender.outfile2.MaxBackupIndex=50
log4j.appender.outfile2.layout=org.apache.log4j.PatternLayout
log4j.appender.outfile2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n

然后有两个类,Test1在com.ht包下面,Test2在com.ht.log包下面。每个下面打印一句:logger.info();

经过试验发现!!!!

Test1将输出到控制台和ht.log

Test2将输出到控制台和ht.log和ht2.log

注意这里rootLogger的级别可是error,可见这里的级别不起作用。

对于申明appender的包rootLogger的级别设置不起作用

其实,这里的error只对于没有申明appender的包才起作用。如果去掉log4j.logger.com.ht.log这一句,Test1没有任何输出,除非logger.error才会输出到控制台。

第二点:凡是申明appender的包,不论申明级别一定会包含rootLogger的输出,如果同时指定了outfile,那么日志会出现两份。

第三点:com.ht.log这个包下面的类可以匹配到所有上级目录的设置。

日志怎么设置要想清楚啊!不然这一句打到控制台那句打到文件,出问题了查出来的日志不连贯,好几个文件查来查去。

log4j.additivity.com.ht=false 可以不写入rootLogger。默认是true

log4j rootLogger配置

log4j.rootLogger=INFO,db语法为


log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
  • level:是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。

Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。

通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。

比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。

appenderName:就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。

例如:

log4j.rootLogger=info,A1,B2,C3 配置了3个输出地方,这个名字可以任意(如上面的db),但必须与我们在后面进行的设置名字对应;

来源:https://blog.csdn.net/u010653311/article/details/12651819

标签:log4j,rootLogger
0
投稿

猜你喜欢

  • Java多线程和并发基础面试题(问答形式)

    2022-03-29 17:39:42
  • java递归算法的实例详解

    2021-06-07 12:15:17
  • redisson分布式限流RRateLimiter源码解析

    2021-05-29 13:10:15
  • Android ListView仿微信聊天界面

    2023-10-15 04:59:46
  • Android UI设计系列之自定义TextView属性实现带下划线的文本框(4)

    2022-08-11 11:03:29
  • Kotlin基础教程之面向对象

    2023-06-21 19:54:36
  • Android Zxing生成二维码经典案例分享

    2022-12-22 10:38:27
  • Spring Cloud Alibaba Nacos Config加载配置详解流程

    2022-03-24 23:06:01
  • C#基于简单工厂模式实现的计算器功能示例

    2023-06-19 12:40:10
  • flutter实现底部导航栏

    2023-08-23 01:06:13
  • C#的回调机制浅析

    2022-04-06 19:10:32
  • SpringBoot整合Web之AOP配置详解

    2022-01-17 21:38:11
  • c++ 虚继承,多继承相关总结

    2022-11-19 12:09:35
  • Spring Cloud Gateway 服务网关的部署与使用详细讲解

    2022-04-09 01:20:00
  • SpringBoot 使用Mybatis分页插件实现详解

    2023-03-06 22:34:19
  • 深入浅析Java 抽象类和接口

    2022-12-17 19:19:27
  • Java基础教程之接口的继承与抽象类

    2023-11-06 20:47:22
  • Android7.0行为变更之适配File Provider的方法

    2021-09-24 08:02:38
  • Android获取点击屏幕的位置坐标

    2023-12-14 21:18:31
  • Java中File文件操作类的基础用法

    2022-09-28 14:37:03
  • asp之家 软件编程 m.aspxhome.com