设为首页 加入收藏

TOP

为什么log4j的概念模型是错的--zlog的模型简介
2014-11-24 08:24:45 来源: 作者: 【 】 浏览:0
Tags:为什么 log4j 概念 模型 --zlog 简介

假设你的log4j系统中有这样的配置


log4j.logger.aa=ERROR, A1
log4j.logger.aa.bb=
log4j.logger.aa.cc=INFO


aa是一个父logger。aa.bb和aa.cc是aa的子logger。


aa.bb继承了aa's等级和输出(appender),等级是ERROR,输出是A1。


aa.cc继承并覆盖了aa的级别。所以aa.cc的等级是INFO输出还是A1。


需求1:如果我现在想把所有的aa的日志,所有的级别,输出到一个特别的文件里面去,并保持原来的aa.bb、aa.cc的输出不变,如何实现?


需求2:假设我动了aa.bb的代码,想在生产上把aa.bb的所有日志,从DEBUG级别开始输出到某个aa.bb.debug.log,而保持aa的ERROR以上级别的日志不动(方便运维人员不改变他们的习惯,直接看原来的日志)


log4j将会如何实现这些需求?很困难,也许要在appender上引入阈值(threshold),或者引入子logger不继承父logger的选项。子logger可以自己指定一个等级,或者从父logger那里继承一个。但说到底,log4j的logger必须有且只能有一个等级,等级和logger是绑定的。


zlog将会如何实现这些需求?首先,zlog继承了syslog配置文件的思想,一个分类的不同等级可以同时存在不同的规则内。这就让过滤同一分类的不同等级的日志到不同日志文件成为可能。


aa.debug “/var/log/aa.debug.log”
aa.=notice “/var/log/aa.notice.log”


是不是觉得自由了很多?


其次,在zlog里面,所有的规则之间都是独立的,没有父子关系。纲目分类的关系表现在分类字符串中间的下划线。举例:


#rule 1
aa_bb.DEBUG “/var/log/aa_bb.log”


#rule 2
aa_cc.INFO “/var/log/aa_cc.log”


#rule 3
aa_.ERROR “/var/log/aa_error.log”


#rule 4
aa.* “/var/log/aa.log”


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Python使用subprocess.Popen导致.. 下一篇Android实现电蚊香/Service服务管..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C 内存管理 | 菜鸟教 (2025-12-26 20:20:37)
·如何在 C 语言函数中 (2025-12-26 20:20:34)
·国际音标 [ç] (2025-12-26 20:20:31)
·微服务 Spring Boot (2025-12-26 18:20:10)
·如何调整 Redis 内存 (2025-12-26 18:20:07)