2012-01-03 7 views
10

log4jを使用してログを書き込むレガシーライブラリを使用します。私のデフォルトのlog4j.propertiesファイルはログをコンソールに送りますが、私のメインプログラムの特定の機能では、(すべてのクラスからの)ロギングを完全に無効にしたいと思います。 Javaコードからlog4jロギングを無効にする方法

は、私が試した、この:

「BasicImplementationは」ログインんメインクラスの1つですが、それはうまくいきませんでした
Logger.getLogger(BasicImplementation.class.getName()).setLevel(Level.OFF); 

- ログはまだコンソールに書き込まれます。ここで

は私のlog4j.propertiesです:

log4j.rootLogger=warn, stdout 
log4j.logger.ac.biu.nlp.nlp.engineml=info, logfile 
log4j.logger.org.BIU.utils.logging.ExperimentLogger=warn 

log4j.appender.stdout = org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern = %-5p %d{HH:mm:ss} [%t]: %m%n 

log4j.appender.logfile = ac.biu.nlp.nlp.log.BackupOlderFileAppender 
log4j.appender.logfile.append=false 
log4j.appender.logfile.layout = org.apache.log4j.PatternLayout 
log4j.appender.logfile.layout.ConversionPattern = %-5p %d{HH:mm:ss} [%t]: %m%n 
log4j.appender.logfile.File = logfile.log 
+1

あなたがルートロガーを無効にする必要がありますが、最初にあなたの 'log4j.properties' /' log4j.xml'を投稿してください可能性が高いです。 – MaDa

+0

OK、投稿しました –

答えて

18

だから、あなたが根を含む定義された3つのロガー、持っている:残念ながら

log4j.rootLogger=warn, stdout 
log4j.logger.ac.biu.nlp.nlp.engineml=info, logfile 
log4j.logger.org.BIU.utils.logging.ExperimentLogger=warn 

を、プログラム的にそれらを無効にするには、コード内でそれらのすべてを指定する必要があります。

Logger.getLogger("ac.biu.nlp.nlp.engineml").setLevel(Level.OFF); 
Logger.getLogger("org.BIU.utils.logging.ExperimentLogger").setLevel(Level.OFF); 
Logger.getRootLogger().setLevel(Level.OFF); 

Here's方法設定ファイルに設定されている設定に戻します。

+0

偉大な、それは働いた! –

-1

あなたはそれがあなたのlog4j.propertiesを変更無効にしようとすることができます:

log4j.rootLogger=off, stdout 
#log4j.logger.ac.biu.nlp.nlp.engineml=info, logfile 
#log4j.logger.org.BIU.utils.logging.ExperimentLogger=warn 

... 

参考: http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Level.html#OFF

+0

-1質問を読む。 OPはそれをプログラム的にやりたい。 – MaDa

-1

はあなたに以下を追加します。ログファイル

log4j.logger.com.class.with.package.BasicImplementation = off, logfiledata 

log4j.appender.logfiledata = ac.biu.nlp.nlp.log.BackupOlderFileAppender 
log4j.appender.logfiledata.append=false 
log4j.appender.logfiledata.layout = org.apache.log4j.PatternLayout 
log4j.appender.logfiledata.layout.ConversionPattern = %-5p %d{HH:mm:ss} [%t]: %m%n 
log4j.appender.logfiledata.File = logfiledata.log 

上記の処理がロギングで停止しない場合は、少なくともBasicImplementationクラスのすべてのデータを別のファイルに記録します。

+0

-1。リックのように。 – MaDa

6

あなたは(静かなコマンドラインツールのような)の完全な沈黙を達成したい場合、あなたは常にNullAppenderを使用することができますJavaコード

+1

ロガーをカスタマイズした場合、これは機能しません。 – Amos

9

内の任意のログを無効にする

Logger.getRootLogger().setLevel(Level.OFF); 

を使用することができます。おそらく、そのような

Logger.getRootLogger().removeAllAppenders(); 
Logger.getRootLogger().addAppender(new NullAppender()); 
+0

ありがとう、完璧に私のために働いた:) – Ashwin

0

Logger.getRootLogger().shutdown();

関連する問題