posts - 11, comments - 29, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 ::  :: 聚合  :: 管理

Log4j 简单配置

Posted on 2006-01-26 18:09 -=Kinohl=- 阅读(2802) 评论(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: 如下解释

  1. [c]/[C] -- 返回用来决定 Class名称 以及 package路径(路径也可是部分的)
  2. [d] -- 返回时间 可能有各种格式format的时间。
  3. [F] -- 返回发出记载Log请求的文件得名字。
  4. [l] -- 返回生成log事件的调用者的Location Information
  5. [L] -- 返回发出记载Log请求的行数。
  6. [m] -- 返回用户自己写的 message
  7. [M] -- 返回发出记载Log请求的方法名称。
  8. [n] -- 返回 换行。(依据平台不同而不同)
  9. [p] -- 返回Log事件的优先级。
  10. [r] -- 返回从Application开始到这条Log事件产生之间的时间间隔。(毫秒)
  11. [t] -- 返回生成Log事件的线程名称。
  12. [x] -- 返回与生成Log事件的线程相关的NDC(内嵌特征内容)
  13. [X] -- 返回与生成Log事件的线程相关的MDC(映射特征内容),要KeyofMDC
  14. 分隔符 -- 空格,可能在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


评论

# re: Log4j 简单配置  回复  更多评论   

2006-01-26 22:54 by -=Kino=-
>>>System.setProperty(""); -_-! 具体内容想不起来了,留言中补充吧。
具体为
表明使用了Log4J:
System.setProperty("org.apache.commons.logging.Log",
"org.apache.commons.logging.impl.Log4JLogger");
设定特殊文件的地方:
URL log4jresource = this.getClass().getResource("log4j.properties");
PropertyConfigurator.configure(log4jresource);
可以把log4j.properties替换为log4j.xml

# re: Log4j 简单配置  回复  更多评论   

2006-11-09 10:51 by 千千
牛人,我的榜样,

只有注册用户登录后才能发表评论。


网站导航: