- - PR -
log4jでコンソールには表示したくない
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 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){ } } } ------------------------------------ 以上のソースでログは出力できるのですが コンソールにもログ表示されてしまいます。 コンソールに表示しないようにするのは どのようにすればいいのでしょうか? ご教授ください | ||||
|
投稿日時: 2004-03-03 13:18
ソースファイル内からLog4jの指定をしたことが無いので全くの勘ですが、
Loggerをインスタンス化した際にデフォルトのアペンダとしてConsoleAppenderが 登録されてしまっているのではないでしょうか。FileAppenderをaddする前に、一度 アペンダのクリアをするとか、そういったことは出来ませんか? | ||||
|
投稿日時: 2004-03-03 13:38
返信ありがとうございます。
loggerのクリアをしてやる方向で調べてるんですが それらしきメソッドもみあたりませんね(;; | ||||
|
投稿日時: 2004-03-03 13:40
ちなみに、なぜソースコード内にアペンダの定義などをハードコードされているのでしょうか?
これらは外部の定義ファイル(log4j.properties等)で行えるということはご存知ですか? 外部の定義ファイルを使った場合、このような現象(勝手にコンソールに出力してしまう)は起きないはずですが。 | ||||
|
投稿日時: 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 -------------ー------------- です。 でも、今回 プログラムへ引数を渡し、ログのファイル名を変更したり 出力形式を変更したりとしなくてはいけませんので そのために、プログラム内ですべて設定してしまおうと思ってます。 | ||||
|
投稿日時: 2004-03-03 14:07
org.apache.log4j.Loggerはorg.apache.log4j.Categoryをextendsしていますが、 このCategoryクラスにremoveAllAppendersというメソッドがありますよ。 Loggerをインスタンス化したらまずこれを呼べば良いということでは? | ||||
|
投稿日時: 2004-03-03 14:11
BasicConfigurator.configure()を呼んでいるので当然コンソールへ出力されます。
自分でいろいろ設定するならこれ呼ばなくて良いんじゃないですか? BasicConfigurator.configure() のAPIドキュメントより。
[ メッセージ編集済み 編集者: サ 編集日時 2004-03-03 14:14 ] | ||||
|
投稿日時: 2004-03-03 14:34
ありがとうございます!!
おまじないなのりで書いてた BasicConfigurator.configure() があだになってたとは おばけさん サさん ありがとうございました。 | ||||
