2013-05-15 9 views
11

ho i seguenti due pacchetti:Utilizzo di Log4J 1. *, come posso scrivere due pacchetti su due file separati?

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

Mi piacerebbe configurare Log4J (SLF4J) per scrivere i log da un unico pacchetto in un file e dall'altro pacchetto in un secondo file. Non voglio che vengano mischiati insieme.

Per essere chiari, questo è un progetto/un processo in esecuzione.

Ho provato a filtrare e con i logger ma sembrano ignorati da log4j. Entrambi i file sono sempre identici.

Modifica: Grazie per le risposte finora, questo è quello che ho e non funziona. Entrambi i file di output sono identici.

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

risposta

21

Prova questo è l'esempio di file delle proprietà:

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 

o questo per XML (evidenziare solo una parte importante):

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

Siamo spiacenti, ho dimenticato di dire che ho un file di configurazione XML. Qual è l'equivalente di questo in xml? log4j.logger.com.mycorp.project.first = DEBUG, FIRST – Csaba

+0

Vedere la mia risposta aggiornata. Possa utile per te amico! –

+0

Ho due domande al riguardo: 1. Se la differenza tra gli appenders è solo il nome del file, c'è un modo per definire le proprietà comuni una volta (XML) per evitare la ridondanza? 2. È possibile mappare un registratore su più pacchetti? – clicky

1

mettere dynamiclly percorso file .in log4j.properties

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

E nel percorso del file insieme java System.setProperty("file.name", FILEPATH);

+0

+1 per aggiornare dinamicamente il percorso .. Grazie – LMSingh

2

Creare due appenders LOG1 e LOG2, uno per ogni file di log . Successivamente, definire due categorie (una per ogni pacchetto) con riferimento a queste appendici nel file di configurazione 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

è sufficiente specificare 2 appendici, ma fornire lo stesso nome file di registro di output per entrambi.

#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 
Problemi correlati