2013-05-15 6 views
11

私は、次の2つのパッケージがあります:私は1つのパッケージからログを書くためにLog4Jの(SLF4J)を設定したいLog4J 1. *を使用すると、2つのパッケージを2つの別々のファイルに書き込むにはどうすればよいですか?

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

を1つのファイルに、もう1つのパッケージから2つ目のファイルにコピーします。私はそれらを一緒に混ぜ合わせたくありません。

明らかに、これは実行中の1つのプロセス/ 1つのプロセスです。

私はフィルタリングを試みましたが、ロガーを使用しましたが、それらはlog4jによって無視されるようです。両方のファイルは常に同じです。

編集:これまでの回答をありがとうございます、これは私が持っているものであり、動作していません。どちらの出力ファイルも同じです。 dynamiclly System.setProperty("file.name", FILEPATH);

答えて

21

ファイルこれは、プロパティの例です。試してみてください。XMLのための

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 

またはこれを(唯一の重要な部分をハイライト):

<!-- 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.アペンダーの違いがファイル名だけの場合は、冗長性を避けるために一度共通のプロパティー(XML)を定義する方法はありますか? 2. 1つのロガーを複数のパッケージにマッピングできますか? – clicky

1

。その後、これらのappenders intをlog4j設定ファイルを参照して2つのカテゴリ(各パッケージに1つ)を定義します。

<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

+1動的にパスを更新します。ありがとう – LMSingh

2

は、2つのアペンダLOG1LOG2、各ログファイルのために作成してlog4j.properties

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

.INとJava設定ファイルパスにパスを提出入れ

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

0

2つのアペンダーを指定するだけで、両方の出力ログファイル名が同じになります。

#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 
関連する問題