2016-06-10 39 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