2016-06-10 89 views
0

我有两个Web应用程序(Proj1和Proj2)。PropertyConfigurator.configure多个log4j文件

log4j.properties文件是在外部位置(大写C:\ proj1_log4j.properties和C:\ proj2_log4j.properties)

有两个用于初始化log4j的上述网络应用程序Servlet过滤器。代码写在两个过滤器的init()方法中。

为Proj1(文件名= Proj1Filter.java)

public void init(FilterConfig arg0) throws ServletException { 
    final String LOG_CONFIG_FILE = "C:/proj1_log4j.properties"; 
    File loggingPropFile = new File(LOG_CONFIG_FILE); 
    FileInputStream fis; 
    try { 
     fis = new FileInputStream(loggingPropFile); 
     Properties properties = new Properties(); 
     properties.load(fis); 
     PropertyConfigurator.configure(properties); 
     LOGGER.info("Logger 111 initialiZed successfully..."); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

log4j的初始化如下为Proj2如下log4j的初始化(文件名= Proj2Filter.java)

public void init(FilterConfig arg0) throws ServletException { 
    final String LOG_CONFIG_FILE = "C:/proj2_log4j.properties"; 
    File loggingPropFile = new File(LOG_CONFIG_FILE); 
    FileInputStream fis; 
    try { 
     fis = new FileInputStream(loggingPropFile); 
     Properties properties = new Properties(); 
     properties.load(fis); 
     PropertyConfigurator.configure(properties); 
     LOGGER.info("Logger 222 initialized successfully..."); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

proj1_log4j.properties

log4j.rootLogger=INFO, stdout1, proj1 

log4j.appender.stdout1=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout1.Target=System.out 
log4j.appender.stdout1.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

log4j.appender.proj1=org.apache.log4j.RollingFileAppender 
log4j.appender.proj1.File=proj1.log 
log4j.appender.proj1.MaxFileSize=10MB 
log4j.appender.proj1.MaxBackupIndex=10 
log4j.appender.proj1.layout=org.apache.log4j.PatternLayout 
log4j.appender.proj1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

proj2_log4j.properties

log4j.rootLogger=INFO, stdout1, proj2 

log4j.appender.stdout1=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout1.Target=System.out 
log4j.appender.stdout1.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

log4j.appender.proj2=org.apache.log4j.RollingFileAppender 
log4j.appender.proj2.File=proj2.log 
log4j.appender.proj2.MaxFileSize=10MB 
log4j.appender.proj2.MaxBackupIndex=10 
log4j.appender.proj2.layout=org.apache.log4j.PatternLayout 
log4j.appender.proj2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

现在就启动Tomcat是越来越创建仅proj1.log。 proj2.log没有被创建。 所有的日志都将proj1.log。 即使来自proj2的记录器语句也是在proj1.log文件中打印日志。

可能是什么原因。

我想要的是,应创建2个日志文件,proj1.log和proj2.log。

回答

0

您将两个appender proj1 & proj2保留在一个文件中,并伴随下面的更改。

若要将项目的具体记录

log4j.logger.com.<project1_root_package> =DEBUG, proj1 
log4j.logger.com.<project2_root_pacakge> =DEBUG, proj2 

,避免设置加日志的复制。

log4j.additivity.com.<project1_root_package>=false 
log4j.additivity.com.<project2_root_pacakge>=false 

最后是你的根记录器变得像

log4j.rootLogger=INFO, stdout1, proj1, proj2 
+0

感谢Bhargav。但是如果两个项目的根包发生相同的话呢? – user1771680

+0

你可以挖掘,直到它达到一个阶段,两者会有所不同,并提及它。 –

+0

那么,我项目中的所有模块都具有相同的封装结构,所以这对我来说是不可能的:( – user1771680