2013-05-15 26 views
11

我有以下兩個包:使用Log4J 1. *,我怎麼能寫兩個包到兩個單獨的文件?

com.mycorp.project.first
com.mycorp.project.second

我想配置Log4j(SLF4J)從一個包寫入日誌到一個文件,從另一個包到第二個文件。我不希望他們混在一起。

要清楚,這是一個項目/一個進程運行。

我已經嘗試過濾和記錄器,但他們似乎被log4j忽略。這兩個文件總是相同的。

編輯:謝謝你到目前爲止的答案,這是我得到的,它不工作。兩個輸出文件都是相同的。

<configuration debug="true"> 
<contextName>dev</contextName> 

<appender name="FIRST_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>A:/dev/LogTesting/logs/first.log</file> 
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
     <level>INFO</level> 
    </filter> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <fileNamePattern>A:/dev/LogTesting/logs/first.%d{yyyyMMdd}%d{_HHmmss,aux}.log.gz</fileNamePattern> 
    </rollingPolicy> 
    <encoder> 
     <pattern>%d{MMM dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
    </encoder> 
</appender> 

<appender name="SECOND_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>A:/dev/LogTesting/logs/second.log</file> 
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
     <level>INFO</level> 
    </filter> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <fileNamePattern>A:/dev/LogTesting/logs/second.%d{yyyyMMdd}%d{_HHmmss,aux}.log.gz</fileNamePattern> 
    </rollingPolicy> 
    <encoder> 
     <Pattern>%d{MMM dd HH:mm:ss.SSS} %property{HOSTNAME} [%thread] %level %logger{36} %msg%n</Pattern> 
    </encoder> 
</appender> 

<!-- =============================================================== --> 
<logger name="com.test.apples" additivity="false"> 
    <level value="DEBUG" /> 
    <appender-ref ref="FIRST_FILE" /> 
</logger> 

<logger name="com.test.oranges" additivity="false"> 
    <level value="DEBUG" /> 
    <appender-ref ref="SECOND_FILE" /> 
</logger> 
<!-- =============================================================== --> 

<category name="com.test.apples" additivity="false"> 
    <priority value="DEBUG"/> 
    <appender-ref ref="FIRST_FILE"/> 
</category> 

<category name="com.test.oranges" additivity="false"> 
    <priority value="DEBUG"/> 
    <appender-ref ref="SECOND_FILE"/> 
</category> 

<!-- =============================================================== --> 

<!-- default --> 
<root level="WARN"> 
    <appender-ref ref="FIRST_FILE" /> 
    <appender-ref ref="SECOND_FILE" /> 
</root> 

回答

21

嘗試這是屬性的示例文件:

log4j.rootLogger=DEBUG, CONSOLE 
# Each package has different appender name  
log4j.logger.com.mycorp.project.first=DEBUG, FIRST 
log4j.logger.com.mycorp.project.second=DEBUG, SECOND 

log4j.appender.FIRST=org.apache.log4j.RollingFileAppender 
log4j.appender.FIRST.File=./first.log 
log4j.appender.FIRST.layout=org.apache.log4j.PatternLayout 

log4j.appender.SECOND=org.apache.log4j.RollingFileAppender 
log4j.appender.SECOND.File=./second.log 
log4j.appender.SECOND.layout=org.apache.log4j.PatternLayout 

或此爲XML(只強調重要的部分):

<!-- FIRST appender definition --> 
<appender name="FIRST" class="org.apache.log4j.FileAppender"> 
    ... 
</appender> 

<!-- SECOND appender definition --> 
<appender name="SECOND" class="org.apache.log4j.FileAppender"> 
    ... 
</appender> 

<!-- logger package com.mycorp.project.first --> 
<logger name="com.mycorp.project.first"> 
    <level value="DEBUG" /> 
    <appender-ref ref="FIRST"/> 
</logger> 

<!-- logger for package com.mycorp.project.second --> 
<logger name="com.mycorp.project.second"> 
    <level value="DEBUG" /> 
    <appender-ref ref="SECOND"/> 
</logger> 
+0

對不起,我忘了提及我有一個xml配置文件。這在xml中有什麼相同之處? log4j.logger.com.mycorp.project.first = DEBUG,FIRST – Csaba

+0

查看我的更新回答。願它對你的朋友有用! –

+0

我對此有兩個問題: 1.如果appenders之間的差異僅僅是文件名,是否有一種方法可以定義一次通用屬性(XML)以避免冗餘? 2.是否可以將一個記錄器映射到多個包? – clicky

1

把dynamiclly文件。在log4j.properties

log4j.appender.FILE.File=${file.name} 

而且在Java中設置文件路徑路徑System.setProperty("file.name", FILEPATH);

+0

+1用於動態更新路徑..謝謝 – LMSingh

2

創建兩個附加目的地LOG1LOG2,每個日誌文件。之後,在log4j配置文件中定義兩個參考這些appender的類別(每個包一個)。

<category name="com.mycorp.project.first" additivity="true"> 
    <priority value="TRACE"/> 
    <appender-ref ref="LOG1"/> 
</category> 

Appender2

<category name="com.mycorp.project.second" additivity="true"> 
    <priority value="TRACE"/> 
    <appender-ref ref="LOG2"/> 
</category> 


0

您只需指定2個appender,但爲兩者提供相同的輸出日誌文件名稱。

#same appender for both packages 
log4j.logger.package1=INFO,MyCommonLogger  
log4j.logger.package2=INFO,MyCommonLogger 

log4j.appender.MyCommonLogger=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.MyCommonLogger.layout=org.apache.log4j.PatternLayout 
log4j.appender.MyCommonLogger.layout.ConversionPattern=%t %d{MM/dd/yy HH:mm:ss} %x %-5p %c %M - %m%n 

#single log file for logs from both packages 
log4j.appender.MyCommonLogger.File=/somewhereonserver/log/mysinglelogfile.log 
相關問題