- PR -

log4jのログが2重に出力される

1
投稿者投稿内容
abu
会議室デビュー日: 2004/07/16
投稿数: 2
投稿日時: 2004-07-16 11:30
こんにちは。いつもお世話になっております。
今回みなさんに助けていただきたいことがあります。

今log4jのログ出力を練習するための簡単なアプリを作成しているのですが、
ログが2重に出力されてしまい困っています。
解決方法がおわかりの方いましたらお教えいただけるとありがたいです。


■環境
win2000,commons-logging,log4j-1.2.8,jdk1.4

■クラス
Main
log.LogTest
log.sublog.LogTest2

■LogTest,LogTest2のコンストラクタの記述
System.out.println("LogTest");//LogTest2クラスならLogTest2になる
log.trace("trace");
log.debug("debug");
log.info("info");
log.warn("warn");
log.error("error");
log.fatal("fatal");

■log4j.xmlの記述
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender" >
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%t] (%F:%L) - %m%n"/>
</layout>
</appender>
<category name="log">
<priority value="info" />
<appender-ref ref="STDOUT"/>
</category>
<category name="log.sublog">
<priority value="error" />
<appender-ref ref="STDOUT"/>
</category>
</log4j:configuration>


MainでLogTest,LogTest2をインスタンス化する。
そうすると以下のようなログが出力される。

■ログ
LogTest
2004-07-16 11:05:02,139 INFO [main] (LogTest.java:13) - info
2004-07-16 11:05:02,159 WARN [main] (LogTest.java:14) - warn
2004-07-16 11:05:02,159 ERROR [main] (LogTest.java:15) - error
2004-07-16 11:05:02,159 FATAL [main] (LogTest.java:16) - fatal
LogTest2
2004-07-16 11:05:02,169 ERROR [main] (LogTest2.java:15) - error
2004-07-16 11:05:02,169 ERROR [main] (LogTest2.java:15) - error
2004-07-16 11:05:02,169 FATAL [main] (LogTest2.java:16) - fatal
2004-07-16 11:05:02,169 FATAL [main] (LogTest2.java:16) - fatal


ここでなぜLogTest2のログが2重に出力されるのかがわからないのです。
そもそもパッケージ全体の出力レベルを設定したあとに、そのパケージ内の個別のクラスに対してレベルを設定できない??
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2004-07-16 13:24
まず、log ロガーが親、log.sublog ロガーが子という関係です。
子ロガーに対するログは、子自身とその全ての親のアペンダーに
出力されます。
よって、log.sublog ロガーは 2 つの STDOUT アペンダーに出力しています。

要求を満たすには、log.sublog ロガーにアペンダーを指定する必要が無いと思います。


[ メッセージ編集済み 編集者: はしもと 編集日時 2004-07-16 13:25 ]
abu
会議室デビュー日: 2004/07/16
投稿数: 2
投稿日時: 2004-07-16 13:36
引用:

はしもとさんの書き込み (2004-07-16 13:24) より:
要求を満たすには、log.sublog ロガーにアペンダーを指定する必要が無いと思います。



返答ありがとうございます。
ああ。。なるほど。そういうことだったのですね。
log4j.xmlの記述を以下のようにしたら、2重にログが出力されなくなりました。
期待したとおりの結果です、ありがとうございました。

■log4j.xml
<category name="log">
<priority value="info" />
<appender-ref ref="STDOUT"/>
</category>
<category name="log.sublog">
<priority value="error" />
</category>
1

スキルアップ/キャリアアップ(JOB@IT)