关于log4j配置问题(转)

本文转自http://blog.csdn.net/hongweigg/article/details/7085895

1、想输出多个文件,不想所有的日志都输出在一个文件里。比如已有一个根logger,能记录所有的日志,但希望对某个类中(某部分或全部)的日志单独输出到一个文件中,怎么办?

解决办法:增加一个logger, 如希望一个叫Swift的类,里面有些日志希望单独输出,则可以增加一个logger记录器,名为SWIFT,日志输出级别为DEBUG。

[plain]  view plain copy
  1. log4j.logger.SWIFT=DEBUG,SWIFT  
  2. log4j.appender.SWIFT=org.apache.log4j.DailyRollingFileAppender  
  3. log4j.appender.SWIFT.File=C:/Logs/SWIFT.log  
  4. log4j.appender.SWIFT.DatePattern='.'yyyy-MM-dd  
  5. log4j.appender.SWIFT.layout=org.apache.log4j.PatternLayout  
  6. log4j.appender.SWIFT.layout.ConversionPattern=[%d] %t %1p %18c{3}(%L):%m %n  

 

与根logger的比较

[plain]  view plain copy
  1. log4j.rootLogger=DEBUG,D  
  2.   
  3. log4j.appender.D=org.apache.log4j.DailyRollingFileAppender  
  4. log4j.appender.D.File=C:/Logs/DEBUG.log  
  5. log4j.appender.D.DatePattern='.'yyyy-MM-dd  
  6. log4j.appender.D.ImmediateFlush=true  
  7. log4j.appender.D.Threshold=DEBUG  
  8. log4j.appender.D.layout=org.apache.log4j.PatternLayout  
  9. log4j.appender.D.layout.ConversionPattern=[%d] %1p %18c{3}(%L):%m %n  

2、如果1中的日志输出太多,不想重复输出到DEBUG.log文件中怎么办?

解决:使用additivity属性,将其属性设置为false,则Swift类中的日志不会再输出到DEBUG.log文件中

[plain]  view plain copy
  1. log4j.logger.SWIFT=DEBUG,SWIFT  
  2. log4j.appender.SWIFT=org.apache.log4j.DailyRollingFileAppender  
  3. <span style="font-weight: bold;">log4j.additivity.SWIFT=false</span>  
  4. log4j.appender.SWIFT.File=C:/Logs/SWIFT.log  
  5. log4j.appender.SWIFT.DatePattern='.'yyyy-MM-dd  
  6. log4j.appender.SWIFT.layout=org.apache.log4j.PatternLayout  
  7. log4j.appender.SWIFT.layout.ConversionPattern=[%d] %t %1p %18c{3}(%L):%m %n  

 

3、看日志的时候,若用ECLIPSE类的开发工具,则发现日志只能到日志文件中看,在开发环境中看不到

解决:只要设置日志输出到控制台即可

[plain]  view plain copy
  1. log4j.rootLogger=DEBUG,stdout  
  2.   
  3. log4j.appender.stdout = org.apache.log4j.ConsoleAppender  
  4. log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
  5. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
  6. log4j.appender.stdout.layout.ConversionPattern=[%t] %-5p %-20c{2}(%L): - %m %n   

4、一个类中,想要一些日志输出到总日志文件(如DEBUG.log)中,一些日志输出到另外的日志文件中,怎么办?

解决:log4j配置参考1的配置。类中设置两个或多个logger,想要输出到哪里就输出到哪里。

[java]  view plain copy
  1. public class Swift extends HttpServlet {  
  2.     static Logger logger = Logger.getLogger(SwiftSys.class);  
  3.     static Logger log = Logger.getLogger("SWIFT");  
  4.     public void doPost(HttpServletRequest req, HttpServletResponse resp)  
  5.             throws ServletException, IOException {  
  6.           logger.debug("输出到总的DEBUG.log文件");  
  7.           log.debug("开小灶,这个日志输出到SWIFT.log中");  
  8.     }  

5、如果想对日志分级怎么办,如错误日志输出到DEBUG.log文件中,错误日志输出到ERROR.log文件中

解决:使用Threshold属性,若输出到DEBUG.log文件中,则属性为DEBUG;若输出到ERROR.log文件中,则属性为ERROR。

下面的例子中logger D为输出DEBUG级别的日志,logger E为输出ERROR级别的日志。

[plain]  view plain copy
  1. log4j.rootLogger=DEBUG,D,E  
  2.   
  3. log4j.appender.D=org.apache.log4j.DailyRollingFileAppender  
  4. log4j.appender.D.File=C:/Logs/DEBUG.log  
  5. log4j.appender.D.DatePattern='.'yyyy-MM-dd  
  6. log4j.appender.D.ImmediateFlush=true  
  7. log4j.appender.D.Threshold=DEBUG  
  8. log4j.appender.D.layout=org.apache.log4j.PatternLayout  
  9. log4j.appender.D.layout.ConversionPattern=[%d] %1p %18c{3}(%L):%m %n  
  10.   
  11. log4j.appender.E=org.apache.log4j.DailyRollingFileAppender  
  12. log4j.appender.E.File=C:/Logs/ERROR.log  
  13. log4j.appender.E.DatePattern='.'yyyy-MM-dd  
  14. log4j.appender.E.ImmediateFlush=true  
  15. log4j.appender.E.Threshold=ERROR  
  16. log4j.appender.E.layout=org.apache.log4j.PatternLayout  
  17. log4j.appender.E.layout.ConversionPattern=[%d] %t %5p %18c{3}(%L):%m %n  

总结:

一个完整的log4j的配置

[plain]  view plain copy
  1. log4j.rootLogger=DEBUG,D,E  
  2.   
  3. log4j.appender.stdout = org.apache.log4j.ConsoleAppender  
  4. log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
  5. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
  6. log4j.appender.stdout.layout.ConversionPattern=[%t] %-5p %-20c{2}(%L): - %m %n   
  7.   
  8. log4j.appender.D=org.apache.log4j.DailyRollingFileAppender  
  9. log4j.appender.D.File=C:/Logs/DEBUG.log  
  10. log4j.appender.D.DatePattern='.'yyyy-MM-dd  
  11. log4j.appender.D.ImmediateFlush=true  
  12. log4j.appender.D.Threshold=DEBUG  
  13. log4j.appender.D.layout=org.apache.log4j.PatternLayout  
  14. log4j.appender.D.layout.ConversionPattern=[%d] %1p %18c{3}(%L):%m %n  
  15.   
  16. log4j.appender.E=org.apache.log4j.DailyRollingFileAppender  
  17. log4j.appender.E.File=C:/Logs/ERROR.log  
  18. log4j.appender.E.DatePattern='.'yyyy-MM-dd  
  19. log4j.appender.E.ImmediateFlush=true  
  20. log4j.appender.E.Threshold=ERROR  
  21. log4j.appender.E.layout=org.apache.log4j.PatternLayout  
  22. log4j.appender.E.layout.ConversionPattern=[%d] %t %5p %18c{3}(%L):%m %n  
  23.   
  24. log4j.appender.SWIFT=org.apache.log4j.DailyRollingFileAppender  
  25. log4j.additivity.SWIFT=false  
  26. log4j.appender.SWIFT.File=C:/Logs/SWIFT.log  
  27. log4j.appender.SWIFT.DatePattern='.'yyyy-MM-dd  
  28. log4j.appender.SWIFT.ImmediateFlush=true  
  29. log4j.appender.SWIFT.Threshold=DEBUG  
  30. log4j.appender.SWIFT.layout=org.apache.log4j.PatternLayout  
  31. log4j.appender.SWIFT.layout.ConversionPattern=[%d] %t %1p %18c{3}(%L):%m %n  

日志常用的两种的形式:

1、日期轮回,一天可以输出一个,一个小时输出一个,或一周输出一个等,具体的可以查阅相关资料,不再赘述。

[plain]  view plain copy
  1. DailyRollingFileAppender  
2、大小轮回,设置每个日志文件最大SIZE,总共多少个日志文件,若所有日志都写满,则最后的部分被挤出丢失。

[plain]  view plain copy
  1. RollingFileAppender  

当然还有可以输出到文件,输出到数据表,或者输出到流等。

日志格式的几点说明:

%d 日期

%t 执行线程

%p 日志级别 如DEBUG, INFO, ERROR, FETAL

%c  所在类得包名,例: %18c{3}  18为固定宽度,不够留空,超过则按实际长度输出;3为包的层次,从当前类往上推

%L 日志输出代码所在行号

%m 日志内容

%n 换行符

高级的内容还有根据不同的用户标识来进行输出,每个用户都有对应的日志,因比较复杂,在此不作阐述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值