- PR -

log4jでコンソールには表示したくない

投稿者投稿内容
マサキ
会議室デビュー日: 2004/03/03
投稿数: 11
お住まい・勤務地: 福岡・博多
投稿日時: 2004-03-03 13:14
Win2000+j2sdk1.4.1_06

質問させてください。
log4jを使い、ログをファイルに出力したいと思っています。

------------------------------------
import org.apache.log4j.*;

public class Log4jout {
public Log4jout() {

}
public void outLog(String mes){
try{
PatternLayout layout = new PatternLayout();
layout.setConversionPattern("%d{yyyy-MM-dd hh:mm:ss} %p %c - %m%n");

FileAppender appender1 = new FileAppender(layout,"c:\\log4.log");
//appender1.setTarget(WriterAppender);

//初期化
BasicConfigurator.configure();

//Loggerを作成
Logger logger = Logger.getLogger(">>");

logger.setLevel(Level.INFO);

//設定の適用
logger.addAppender(appender1);

//ログ出力
logger.info(mes);
}catch(Exception ex){

}
}
}
------------------------------------

以上のソースでログは出力できるのですが
コンソールにもログ表示されてしまいます。
コンソールに表示しないようにするのは
どのようにすればいいのでしょうか?

ご教授ください
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-03-03 13:18
ソースファイル内からLog4jの指定をしたことが無いので全くの勘ですが、
Loggerをインスタンス化した際にデフォルトのアペンダとしてConsoleAppenderが
登録されてしまっているのではないでしょうか。FileAppenderをaddする前に、一度
アペンダのクリアをするとか、そういったことは出来ませんか?
マサキ
会議室デビュー日: 2004/03/03
投稿数: 11
お住まい・勤務地: 福岡・博多
投稿日時: 2004-03-03 13:38
返信ありがとうございます。

loggerのクリアをしてやる方向で調べてるんですが
それらしきメソッドもみあたりませんね(;;
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-03-03 13:40
ちなみに、なぜソースコード内にアペンダの定義などをハードコードされているのでしょうか?
これらは外部の定義ファイル(log4j.properties等)で行えるということはご存知ですか?
外部の定義ファイルを使った場合、このような現象(勝手にコンソールに出力してしまう)は起きないはずですが。
マサキ
会議室デビュー日: 2004/03/03
投稿数: 11
お住まい・勤務地: 福岡・博多
投稿日時: 2004-03-03 13:46
はい。
外部から指定した場合はうまくいきました。
(コンソールには表示されない)

そのときの内容は
-------------ー-------------
# root Logger
log4j.rootLogger= DEBUG , A

# APPENDER A
log4j.appender.A = org.apache.log4j.FileAppender
log4j.appender.A.File = log4.log

# Layout
log4j.appender.A.layout=org.apache.log4j.PatternLayout
log4j.appender.A.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss} %p %c - %m%n
-------------ー-------------
です。


でも、今回
プログラムへ引数を渡し、ログのファイル名を変更したり
出力形式を変更したりとしなくてはいけませんので
そのために、プログラム内ですべて設定してしまおうと思ってます。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-03-03 14:07
引用:

loggerのクリアをしてやる方向で調べてるんですが
それらしきメソッドもみあたりませんね(;;


org.apache.log4j.Loggerはorg.apache.log4j.Categoryをextendsしていますが、
このCategoryクラスにremoveAllAppendersというメソッドがありますよ。
Loggerをインスタンス化したらまずこれを呼べば良いということでは?
佐々木
大ベテラン
会議室デビュー日: 2003/03/30
投稿数: 121
投稿日時: 2004-03-03 14:11
BasicConfigurator.configure()を呼んでいるので当然コンソールへ出力されます。
自分でいろいろ設定するならこれ呼ばなくて良いんじゃないですか?

BasicConfigurator.configure() のAPIドキュメントより。
引用:

Add a ConsoleAppender that uses PatternLayout using the PatternLayout.TTCC_CONVERSION_PATTERN and prints to System.out to the root category.



[ メッセージ編集済み 編集者: サ 編集日時 2004-03-03 14:14 ]
マサキ
会議室デビュー日: 2004/03/03
投稿数: 11
お住まい・勤務地: 福岡・博多
投稿日時: 2004-03-03 14:34
ありがとうございます!!

おまじないなのりで書いてた
BasicConfigurator.configure()
があだになってたとは

おばけさん
サさん
ありがとうございました。

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