Posted on 2006-01-26 18:09
-=Kinohl=- 阅读(2814)
评论(2) 编辑 收藏 所属分类:
读书笔记
Log4j 简单配置
***************************************
关键字:Log4j
难易度:简单
软件版本:apache-log4j-1.2.9
时间:2006-01-26
Author:Kino
***************************************
呵呵 快过年了。眼看身边的朋友一个一个离开,踏上归途,心里不免有些淡淡的忧伤。为了消磨时间,写写文章也和久违的大家聊聊。
这里先祝愿各位朋友新春快乐。在狗年旺、旺、旺旺旺。
切入正题吧。大名鼎鼎的Log4j我也理解得不深,这里采用假设的问答方式介绍吧。
Q:Log4j是个什么东西?
A:Log4j应该叫做 Log for java吧,是ApacheGroup旗下的明星项目,已经应用在很多方面了。同类的还有针对c c++等的log4c log4XXX之类。请自己看链接:
Q:Log4j到底是怎么被应用得?
A:这就要从结构上说了,首先我们应用的并不是Log4j而是Jakarta-Commons-logging,但是这只是一个interface包没有具体的实现(其实是有的,叫做SampleLog弱但是快)。所以在大火的source里你只需要面向Logging编程而无须关心到底是如何生成的。因为Logging项目支持很多实现并不一定是Log4j。还有JDK的Log也行啊。那我们要做的就是 配置 Log4j到系统就好了。
Q:Log4j到底要配置什么东西,才能被系统识别?
A:2个:Jar包 和 log4j配置文件。 Jar我就不说了。现在来说Log4j配置文件。这个文件可以随意命名,默认的文件是 log4j.properties 。放在你的src根目录下就好。比如 你的source的catagory是com.yourcompany.xx那么放在和com并列的目录下就好。
Q:如果我不想用默认的log4j.properties 我应该怎么定义,怎么做?
A:那就使用下边的命令定义:
System.setProperty(""); -_-! 具体内容想不起来了,留言中补充吧。
如果你是Struts工程或者Web工程,需要做一个sevlet把这段代码载入。重载ActionServlet的init方法就好。
Q:这个文件如何定义?
A:如下例。(具体的可以查阅JavaDoc)
### direct log messages to console ###
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy MMM dd HH:mm:ss:SSS} %-5p %m (%F:%L) [%t]%n
### direct messages to file gm_web.log ###
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=../logs/gm_web.log
log4j.appender.FILE.MaxFileSize=1000KB
log4j.appender.FILE.MaxBackupIndex=5
log4j.appender.FILE.Append=true
log4j.appender.FILE.Threshold=DEBUG
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy MMM dd HH:mm:ss:SSS} %-5p %m (%F:%L) [%t]%n
# Set root category priority to INFO and its only appender to CONSOLE.
log4j.rootCategory=ERROR, CONSOLE, FILE
log4j.logger.com.mycompany.ui=DEBUG, CONSOLE, FILE
XML格式的定义,我就不说了,资料满天都是。
Q:听说Log记录有继承关系,那么多Log,效率太低了吧
A:有继承关系,对应的当然就有打破继承的定义,比如上例。
log4j.rootCategory=ERROR, CONSOLE, FILE
log4j.logger.com.mycompany.ui=DEBUG, CONSOLE, FILE
com.mycompany.ui就继承了rootCategory的Log记录级别。但是如果像破除使用additivity
log4j.additivity.com.mycompany.ui=false
就KO了。
Q:log4j.appender.FILE.File=yourlogfile.log 到底给我把Log放哪去了?能改不?
A:如果是Tomcat那就放到bin下边了。能改啊,bin就是基准目录,写相对路径就好咯。如上例。
Q:Log4j中ConversionPattern到底都是什么意思,都怎么用啊?
A: 如下解释
- [c]/[C] -- 返回用来决定 Class名称 以及 package路径(路径也可是部分的)
- [d] -- 返回时间 可能有各种格式format的时间。
- [F] -- 返回发出记载Log请求的文件得名字。
- [l] -- 返回生成log事件的调用者的Location Information。
- [L] -- 返回发出记载Log请求的行数。
- [m] -- 返回用户自己写的 message。
- [M] -- 返回发出记载Log请求的方法名称。
- [n] -- 返回 换行。(依据平台不同而不同)
- [p] -- 返回Log事件的优先级。
- [r] -- 返回从Application开始到这条Log事件产生之间的时间间隔。(毫秒)
- [t] -- 返回生成Log事件的线程名称。
- [x] -- 返回与生成Log事件的线程相关的NDC(内嵌特征内容)
- [X] -- 返回与生成Log事件的线程相关的MDC(映射特征内容),要KeyofMDC
- 分隔符 -- 空格,可能在left 也可能在 right
Q:ConversionPattern参数能去哪里参考呢?
A:JavaDoc PatternLayout 类。
http://logging.apache.org/log4j/docs/api-unstable/index.html
Q:Log4j会不会太慢啊,性能如何?
A:这个问题不好回答。反正记录一条Log大约的时间是20ms 到 400ms吧,根据你ConversionPattern需要记录的格式内容,以及package catagory的继承关系来决定。那么每个pattern到底哪个快哪个慢,哪个超级慢,请看http://logging.apache.org/log4j/docs/api-unstable/index.html。总归一句话,只要让log4j给你trace调用关系,反射class 就别指望能快,格谁都一样,是吧。
Q:下班了没,啰嗦这么多,有问题再问你吧,留下联系信息
A:刚下班,还吃了朋友的蛋糕(他本人正在飞机上,哈哈,吃了个独食),回家咯。讨论问题的请留言或者kinoviti@gmail.com QQ:23493713