关于log4j root logger 标签 以及additivity 属性_大鑫不列迭的博客

CSDN博客_log4j root · · 131 次点击 · · 开始浏览    

今天和两个同事讨论Log4j,他们都需要解决一个问题,怎么分开输出Logger。这么讲不清楚,举个例子:

 

 

Java代码  复制代码  收藏代码
  1. package com.gmail.at.ankyhe.log4jtest;  
  2.   
  3. import org.apache.log4j.Logger;  
  4.   
  5. public class ClassA {  
  6.       
  7.     private static Logger logger = Logger.getLogger(ClassA.class.getName());  
  8.       
  9.     public ClassA() {  
  10.         logger.info("ENTER ClassA()");  
  11.     }  
  12.       
  13.     public void foo() {  
  14.         logger.info("foo()");  
  15.         bar();  
  16.     }  
  17.       
  18.     public void bar() {  
  19.         Logger myLog = Logger.getLogger("bar");  
  20.         myLog.debug("bar()D");  
  21.         myLog.info("bar()I");  
  22.     }  
  23.   
  24. }  
[java]  view plain  copy
  1. package com.gmail.at.ankyhe.log4jtest;  
  2.   
  3. import org.apache.log4j.Logger;  
  4.   
  5. public class ClassA {  
  6.       
  7.     private static Logger logger = Logger.getLogger(ClassA.class.getName());  
  8.       
  9.     public ClassA() {  
  10.         logger.info("ENTER ClassA()");  
  11.     }  
  12.       
  13.     public void foo() {  
  14.         logger.info("foo()");  
  15.         bar();  
  16.     }  
  17.       
  18.     public void bar() {  
  19.         Logger myLog = Logger.getLogger("bar");  
  20.         myLog.debug("bar()D");  
  21.         myLog.info("bar()I");  
  22.     }  
  23.   
  24. }  

 我希望bar可以输出到一个地方,其他的logger可以输出到一个地方。一般的配置文件如下:

 

Xml代码  复制代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">  
  3.   
  4. <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' >  
  5.   
  6.   <appender name="myConsole" class="org.apache.log4j.ConsoleAppender">  
  7.     <layout class="org.apache.log4j.PatternLayout">  
  8.       <param name="ConversionPattern"    
  9.         value="[%d{dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n" />  
  10.     </layout>  
  11.   </appender>  
  12.   
  13.   <appender name="myFile" class="org.apache.log4j.RollingFileAppender">    
  14.     <param name="File" value="xml.log" />  
  15.     <param name="Append" value="false" />  
  16.     <param name="MaxBackupIndex" value="10" />  
  17.     <layout class="org.apache.log4j.PatternLayout">  
  18.       <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />  
  19.     </layout>  
  20.   </appender>  
  21.   
  22.   
  23.   <logger name="bar">  
  24.     <level value="info" />   
  25.     <appender-ref ref="myConsole" />   
  26.   </logger>  
  27.     
  28.   <root>  
  29.     <priority value="debug" />  
  30.     <appender-ref ref="myFile" />  
  31.   </root>  
  32. </log4j:configuration>  
[xml]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">  
  3.   
  4. <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' >  
  5.   
  6.   <appender name="myConsole" class="org.apache.log4j.ConsoleAppender">  
  7.     <layout class="org.apache.log4j.PatternLayout">  
  8.       <param name="ConversionPattern"    
  9.         value="[%d{dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n" />  
  10.     </layout>  
  11.   </appender>  
  12.   
  13.   <appender name="myFile" class="org.apache.log4j.RollingFileAppender">    
  14.     <param name="File" value="xml.log" />  
  15.     <param name="Append" value="false" />  
  16.     <param name="MaxBackupIndex" value="10" />  
  17.     <layout class="org.apache.log4j.PatternLayout">  
  18.       <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />  
  19.     </layout>  
  20.   </appender>  
  21.   
  22.   
  23.   <logger name="bar">  
  24.     <level value="info" />   
  25.     <appender-ref ref="myConsole" />   
  26.   </logger>  
  27.     
  28.   <root>  
  29.     <priority value="debug" />  
  30.     <appender-ref ref="myFile" />  
  31.   </root>  
  32. </log4j:configuration>  

 这样会发现一个问题,myLog的输出又会在文件,又会在终端。原因在Log4J官方的Introduction讲的很清楚:

http://logging.apache.org/log4j/1.2/manual.html  搜索Appender Additivity. 我解释一下就是默认情况下bar会集成root的输出。知道了原因,那怎么修改就简单了。

 

Xml代码  复制代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">  
  3.   
  4. <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' >  
  5.   
  6.   <appender name="myConsole" class="org.apache.log4j.ConsoleAppender">  
  7.     <layout class="org.apache.log4j.PatternLayout">  
  8.       <param name="ConversionPattern"    
  9.         value="[%d{dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n" />  
  10.     </layout>  
  11.   </appender>  
  12.   
  13.   <appender name="myFile" class="org.apache.log4j.RollingFileAppender">    
  14.     <param name="File" value="xml.log" />  
  15.     <param name="Append" value="false" />  
  16.     <param name="MaxBackupIndex" value="10" />  
  17.     <layout class="org.apache.log4j.PatternLayout">  
  18.       <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />  
  19.     </layout>  
  20.   </appender>  
  21.   
  22.   
  23.   <logger name="bar" additivity="false">  
  24.     <level value="info" />   
  25.     <appender-ref ref="myConsole" />   
  26.   </logger>  
  27.     
  28.   <root>  
  29.     <priority value="debug" />  
  30.     <appender-ref ref="myFile" />  
  31.   </root>  
  32. </log4j:configuration>  
[xml]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">  
  3.   
  4. <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' >  
  5.   
  6.   <appender name="myConsole" class="org.apache.log4j.ConsoleAppender">  
  7.     <layout class="org.apache.log4j.PatternLayout">  
  8.       <param name="ConversionPattern"    
  9.         value="[%d{dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n" />  
  10.     </layout>  
  11.   </appender>  
  12.   
  13.   <appender name="myFile" class="org.apache.log4j.RollingFileAppender">    
  14.     <param name="File" value="xml.log" />  
  15.     <param name="Append" value="false" />  
  16.     <param name="MaxBackupIndex" value="10" />  
  17.     <layout class="org.apache.log4j.PatternLayout">  
  18.       <param name="ConversionPattern" value="%p (%c:%L)- %m%n" />  
  19.     </layout>  
  20.   </appender>  
  21.   
  22.   
  23.   <logger name="bar" additivity="false">  
  24.     <level value="info" />   
  25.     <appender-ref ref="myConsole" />   
  26.   </logger>  
  27.     
  28.   <root>  
  29.     <priority value="debug" />  
  30.     <appender-ref ref="myFile" />  
  31.   </root>  
  32. </log4j:configuration>  

 唯一的区别是在bar那个logger后面加了一个 additivity="false"。我试了一下,可以按照要求工作。这是xml的配置,一般的property的配置如下:

 

Xml代码  复制代码  收藏代码
  1. log4j.rootLogger=DEBUG, FA  
  2. log4j.category.bar = INFO, CA  
  3. log4j.additivity.bar = false  
  4.   
  5. #Console Appender  
  6.   
  7. log4j.appender.CA=org.apache.log4j.ConsoleAppender  
  8. log4j.appender.CA.layout=org.apache.log4j.PatternLayout  
  9. log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n  
  10.   
  11. #File Appender  
  12. log4j.appender.FA=org.apache.log4j.FileAppender  
  13. log4j.appender.FA.File=property.log  
  14. log4j.appender.FA.layout=org.apache.log4j.PatternLayout  
  15. log4j.appender.FA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n  
  16.   
  17.              
[xml]  view plain  copy
  1. log4j.rootLogger=DEBUG, FA  
  2. log4j.category.bar = INFO, CA  
  3. log4j.additivity.bar = false  
  4.   
  5. #Console Appender  
  6.   
  7. log4j.appender.CA=org.apache.log4j.ConsoleAppender  
  8. log4j.appender.CA.layout=org.apache.log4j.PatternLayout  
  9. log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n  
  10.   
  11. #File Appender  
  12. log4j.appender.FA=org.apache.log4j.FileAppender  
  13. log4j.appender.FA.File=property.log  
  14. log4j.appender.FA.layout=org.apache.log4j.PatternLayout  
  15. log4j.appender.FA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n  
  16.   

本文来自:CSDN博客_log4j root

感谢作者:CSDN博客_log4j root

查看原文:关于log4j root logger 标签 以及additivity 属性_大鑫不列迭的博客

131 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传