Log4j 1.2总结

尽管Log4j 1.2已不再维护,但鉴于其广泛使用,本文将总结其核心组件——Logger、Appender和Layouts。重点讨论Logger的层级结构、Level的继承以及Appender的冒泡行为,帮助读者理解Log4j的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Log4j 1.2 都已经不再维护了, 为什么还有总结

  1. 确实还有很多在用的
  2. 确实还有很多不清楚的地方

Log4j 的三大组成部分, Logger, Appender, Layouts

网上大部分的文章都是讲 Appender的, 讲PatternLayout里的那些 format, 但是很少有讲Logger, 确实也很奇怪

Level

在说Logger之前要说Level, 后面有跟Level相关的内容
标准的Log4j的Level有 TRACE, DEBUG, INFO, WARN, ERROR, FATAL
他们的顺序是 TRACE<DEBUG<INFO<WARN<ERROR<FATAL

Logger

RootLogger

RootLogger 两大特性

  1. 永远存在
  2. 不能通过名字获取
  3. 必须要设定Level
    所以总看网上的配置是类似这样的
log4j.rootLogger=debug,A1,A2,A3

这就是在给rootLogger设置Level

Logger 是有层级的
  1. Level是继承的
    如果没有特别指定, 则找离自己有明确设定的祖先的Level进行继承, 如果都没有, 就找rootLogger
    当在代码里调用logger的输出方法, 比如debug(), info(), warn(), error(),等方法时, Log4j的逻辑是, 只有当调用的Level>=logger 设置的Level时, 消息才能被显示, 比如
    调用debug()的时候, 对应logger设置的Level要小于等于Debug时, 消息才能被显示, 所以总要找到一个结果的Level进行比较, 如果它自己的logger没有设置, 则会找它的parent logger的设置, 直到找到设置的Level, 或者找到rootLogger为止

  2. Appender是冒泡的, 官方的叫法是 Appender additivity
    除非 additivity flag设置为false, 否则, 就冒泡到rootLogger

LoggerNameAdd AppenderAdditivityOutput Targets
rootA1A1
xA-x1, A-x2trueA1, A-x1, A-x2
x.ytrueA1, A-x1, A-x2
x.y.zA-xyz1trueA1, A-x1, A-x2, A-xyz1
securityA-secfalseA-sec
security.accesstrueA-sec

这个表就说明, 当additivity flag设置为true的时候, 就会冒泡, 也就是输出完自己的Appender之后, 会向上找parent Appender进行输出, 直到 遇到 additivity flag 为false, 或者到rootLogger为止

定义Logger

在log4j.properties文件上

log4j.logger.yourloggername=Level,appender1,...appenderN

比如

log4j.logger.com.foo.bar=debug, A1
设置 additivity flag

在log4j.properties上 官网地址

log4j.additivity.com.foo.bar=false

Appender

网上说了很多的Appender, 很多说的都很详细, 我在这里就不再重复了, 官网的语法在这里, 它这个说的不具体, 还不如网上翻译的更具体了

Layouts

主要是 PatternLayout, 网上说的也很多, 唯一的问题在于, 官网上的WARNING还是要注意一下的

Conversion CharacterWarning
CWARNING Generating the caller class information is slow. Thus, use should be avoided unless execution speed is not an issue.
FWARNING Generating caller location information is extremely slow and should be avoided unless execution speed is not an issue.
lThe location information can be very useful. However, its generation is extremely slow and should be avoided unless execution speed is not an issue.
LWARNING Generating caller location information is extremely slow and should be avoided unless execution speed is not an issue.
MWARNING Generating caller location information is extremely slow and should be avoided unless execution speed is not an issue.

总结

  1. rootLogger的Level一般要设置的比较高, 因为它相当于是默认
  2. 自己定义的logger除了设置Level以外, 还要设置appender, 把自己关心的日志内容从总的日志文件中分离出来
  3. 如果没有必要, 就把additivity设置为false, 不然同样的日志内容出现在多个appender中, 即不得看, 也占用磁盘空间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值