在一个项目中我使用了两个LOG4J对象,但我发现他们之间有冲突.比如第一个我输出信息到控制台,第二个我输出信息到文件,但是当我执行第二个LOG4J的时候,在控制台上也显示出了信息.第一个我是通过配置文件进行配置的,第二个我是在程序运行的时候进行配置的.
代码如下:-------------------------------
通过配置文件的LOG4J:
log4j.rootLogger=INFO,console,Rlog4j.category.org.apache=OFF
log4j.category.modeler=OFF
log4j.category.http11=OFFlog4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS} [%t] %-5p %c - %m%n
----------------------------
通过程序执行的LOG4J:
import org.apache.log4j.*;
import test.Common;public class SEM02Log extends PatternLayout {

private static Logger loggers = Logger.getLogger(SEM02Log.class.getName());                             

static { 
String strDateStatic = Common.getData("other.logtxt");      
    PatternLayout layout = new PatternLayout();  
    layout.setConversionPattern("%m%n");         
    
    DailyRollingFileAppender appender = null;   
try {
appender = new DailyRollingFileAppender(layout,strDateStatic,"yyyyMMdd'.log'");  
        
} catch (Exception e) {
e.printStackTrace();
}

loggers.addAppender(appender);        
loggers.setLevel((Level)Level.INFO);  
}
public static void outputFile (String Id,
String Browser,
int Unique) throws Exception{

String str = Id + " " +Browser + " " + Unique;  
    loggers.info(str);                                        
}
}-----------------------------------------------
运行项目的时候第一个LOG4J就执行了,当我运行项目中的一个模块后,第二个LOG4J也运行了,但是在第二个LOG4J并没有配置输出控制台的语法.而他在运行的时候却执行了第一个LOG4J中的log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS} [%t] %-5p %c - %m%n请问原因是什么,我如何解决这种矛盾呢

解决方案 »

  1.   

    楼上的朋友你没有理解我的意思啊.
    不是什么版本的问题,我只用一个LOG4J版本.我的意思是在我的项目中同时配置了两个LOG4J,一个通过配置文件将信息输出到控制台,一个通过程序,将信息输出到文件.注意,根据项目的需要我必须配置两个LOG4J,是不能配置一个的.
      

  2.   

    我真的不太理解你为什么非要配置两个log4j文件?
    你在第一个配置里边全部搞定不就ok了?
    你现在是不是不能动第一个配置文件?而又想增加自己的log输出?
    如果你的log输出是特殊的配置,可以参考高级配置中的内容,使用字符串匹配指定自己的log输出,那样你就可以使用debug来输出,而对于debug的输出信息,在第一个配置中是不会输出的。