log4j.logger.包名rootLogger 与log4j.logger.包名rootCategory 有什么区别

log4j的rootLogger及其他坑爹的地方
这里用的是org.apache.log4j.Logger
log4j.rootLogger=error, stdout &
log4j.appender.appenderName=org.apache.log4j.AsyncAppender &
log4j.appender.stdout=org.apache.log4j.ConsoleAppender &
log4j.appender.stdout.Target=System.out &
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout &
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n &
#only time no date.outfile1 has date &
.ht=info,outfile1 &
log4j.appender.outfile1=org.apache.log4j.RollingFileAppender &
log4j.appender.outfile1.File=log/ht.log &
log4j.appender.outfile1.MaxFileSize=100MB &
log4j.appender.outfile1.MaxBackupIndex=50 &
log4j.appender.outfile1.layout=org.apache.log4j.PatternLayout &
log4j.appender.outfile1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n &
.ht.log=info,outfile2 &
log4j.appender.outfile2=org.apache.log4j.RollingFileAppender &
log4j.appender.outfile2.File=log/ht2.log &
log4j.appender.outfile2.MaxFileSize=100MB &
log4j.appender.outfile2.MaxBackupIndex=50 &
log4j.appender.outfile2.layout=org.apache.log4j.PatternLayout &
log4j.appender.outfile2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n &
然后有两个类,Test1在com.ht包下面,Test2在com.ht.log包下面。每个下面打印一句:();
经过试验发现!!!!:
Test1将输出到控制台和ht.log
Test2将输出到控制台和ht.log和ht2.log
注意这里rootLogger的级别可是error,可见这里的级别不起作用。
对于申明appender的包rootLogger的级别设置不起作用!!
其实,这里的error只对于没有申明appender的包才起作用。如果去掉.ht.log这一句,Test1没有任何输出,除非logger.error才会输出到控制台。
第二点:凡是申明appender的包,不论申明级别一定会包含rootLogger的输出,如果同时指定了outfile,那么日志会出现两份。
第三点:com.ht.log这个包下面的类可以匹配到所有上级目录的设置。
日志怎么设置要想清楚啊!不然这一句打到控制台那句打到文件,出问题了查出来的日志不连贯,好几个文件查来查去。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'Log4J 如何分开Logger输出 - ankyhe - ITeye技术网站
博客分类:
今天和两个同事讨论Log4j,他们都需要解决一个问题,怎么分开输出Logger。这么讲不清楚,举个例子:
package com.gmail.at.ankyhe.log4
import org.apache.log4j.L
public class ClassA {
private static Logger logger = Logger.getLogger(ClassA.class.getName());
public ClassA() {
("ENTER ClassA()");
public void foo() {
("foo()");
public void bar() {
Logger myLog = Logger.getLogger("bar");
myLog.debug("bar()D");
("bar()I");
我希望bar可以输出到一个地方,其他的logger可以输出到一个地方。一般的配置文件如下:
&?xml version="1.0" encoding="UTF-8"?&
&!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&
&log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' &
&appender name="myConsole" class="org.apache.log4j.ConsoleAppender"&
&layout class="org.apache.log4j.PatternLayout"&
&param name="ConversionPattern"
value="[%d{dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n" /&
&/appender&
&appender name="myFile" class="org.apache.log4j.RollingFileAppender"&
&param name="File" value="xml.log" /&
&param name="Append" value="false" /&
&param name="MaxBackupIndex" value="10" /&
&layout class="org.apache.log4j.PatternLayout"&
&param name="ConversionPattern" value="%p (%c:%L)- %m%n" /&
&/appender&
&logger name="bar"&
&level value="info" /&
&appender-ref ref="myConsole" /&
&priority value="debug" /&
&appender-ref ref="myFile" /&
&/log4j:configuration&
这样会发现一个问题,myLog的输出又会在文件,又会在终端。原因在Log4J官方的Introduction讲的很清楚:
搜索Appender Additivity. 我解释一下就是默认情况下bar会集成root的输出。知道了原因,那怎么修改就简单了。
&?xml version="1.0" encoding="UTF-8"?&
&!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&
&log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' &
&appender name="myConsole" class="org.apache.log4j.ConsoleAppender"&
&layout class="org.apache.log4j.PatternLayout"&
&param name="ConversionPattern"
value="[%d{dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n" /&
&/appender&
&appender name="myFile" class="org.apache.log4j.RollingFileAppender"&
&param name="File" value="xml.log" /&
&param name="Append" value="false" /&
&param name="MaxBackupIndex" value="10" /&
&layout class="org.apache.log4j.PatternLayout"&
&param name="ConversionPattern" value="%p (%c:%L)- %m%n" /&
&/appender&
&logger name="bar" additivity="false"&
&level value="info" /&
&appender-ref ref="myConsole" /&
&priority value="debug" /&
&appender-ref ref="myFile" /&
&/log4j:configuration&
唯一的区别是在bar那个logger后面加了一个 additivity="false"。我试了一下,可以按照要求工作。这是xml的配置,一般的property的配置如下:
log4j.rootLogger=DEBUG, FA
log4j.category.bar = INFO, CA
log4j.additivity.bar = false
#Console Appender
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
#File Appender
log4j.appender.FA=org.apache.log4j.FileAppender
log4j.appender.FA.File=property.log
log4j.appender.FA.layout=org.apache.log4j.PatternLayout
log4j.appender.FA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
浏览 14924
浏览: 159574 次
来自: 北京
博主知道修改properties 后,如何可以不重新编译,修改 ...
能给我发一个吗?谢谢
// Singleton.h 错误的实例
class S ...
谢谢兄弟,正好用上,感谢了
不知道google能实现这个不,估计也不太容易2013年10月 Java大版内专家分月排行榜第二2013年3月 Java大版内专家分月排行榜第二2013年2月 Java大版内专家分月排行榜第二
2013年7月 Java大版内专家分月排行榜第三2013年5月 Java大版内专家分月排行榜第三2013年4月 Java大版内专家分月排行榜第三
2013年10月 Java大版内专家分月排行榜第二2013年3月 Java大版内专家分月排行榜第二2013年2月 Java大版内专家分月排行榜第二
2013年7月 Java大版内专家分月排行榜第三2013年5月 Java大版内专家分月排行榜第三2013年4月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 log4j.rootcategory 的文章

 

随机推荐