`
fanrey
  • 浏览: 252039 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

log4j的additive属性设置

 
阅读更多
默认情况下,logger的additive标志被设置为true,表示子logger将继承父logger的所有appenders。该选项可以被重新设置,表示子logger将不再继承父logger的appenders。

例如:
log4j.rootCategory=INFO, axx, file, notif
log4j.category.il.axxrpc.AxxRpcAdapter=INFO, file

上面这个例子会把AxxRpcAdapter的INFO level的log输出到file, axx, notif三个appender上, 其中axx和notif是继承自root logger的。

如果我们想只把AxxRpcAdapter的log输出到"file", 则应该把additive标志设为false。
log4j.additivity.il.axxrpc.AxxRpcAdapter=false

性能方面考虑:
如果多个线程写log到同一个文件,每个线程拿到RootCategory时会做同步(synchronized),最终会导致线程间的等待,影响性能。

如何避免:
1. 发布的产品log level要尽量设高(比如ERROR, OFF), 少打log;
2. 可以根据模块分文件打log。由于logger的继承性, 不同的appender最终都可以调用到Root Logger而做同步,从而影响性能。所以可以考虑对每个appendername设定additive=false
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics