2013-05-15 16 views
11

mam dwa następujące pakiety:Korzystanie z Log4J 1. *, jak mogę napisać dwa pakiety do dwóch oddzielnych plików?

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

Chciałbym skonfigurować Log4J (slf4j) pisać dzienniki z jednej paczce do jednego pliku, az innego pakietu do drugiego pliku. Nie chcę, żeby się ze sobą mieszali.

Dla jasności, jest to jeden projekt/jeden proces uruchomiony.

Próbowałem filtrowania i rejestratory, ale wydają się być ignorowane przez log4j. Oba pliki są zawsze identyczne.

Edycja: Dziękuję za odpowiedzi do tej pory, to jest to, co mam i to nie działa. Oba pliki wyjściowe są identyczne.

<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> 

Odpowiedz

21

Spróbuj to jest przykład pliku właściwości:

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 

czy to XML (tylko podkreślić ważną rolę):

<!-- 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

Niestety, zapomniałem wspomnieć Mam plik konfiguracyjny XML. Jaki jest odpowiednik tego w xml? log4j.logger.com.mycorp.project.first = DEBUG, FIRST – Csaba

+0

Wyświetl moją zaktualizowaną odpowiedź. Niech ci się przyda, przyjacielu! –

+0

Mam dwa pytania na ten temat: 1. Jeśli różnica między aplikacjami to tylko nazwa pliku, czy istnieje sposób na zdefiniowanie wspólnych właściwości raz (XML), aby uniknąć nadmiarowości? 2. Czy można mapować jeden rejestrator do wielu pakietów? – clicky

1

umieścić dynamiclly złożyć ścieżkę .in log4j.properties

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

I w Javie ścieżce zestaw plików System.setProperty("file.name", FILEPATH);

+0

+1 do dynamicznego aktualizowania ścieżkę .. Dzięki – LMSingh

2

Utwórz dwa appenders LOG1 i LOG2, po jednym dla każdego pliku dziennika . Po tym zdefiniuj dwie kategorie (po jednej dla każdego pakietu) w odniesieniu do tych aplikatorów w pliku konfiguracyjnym log4j.

<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

po prostu określ dwóch dodających, ale podać tę samą nazwę pliku dziennika wyjściowego dla obu.

#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 
Powiązane problemy