web-dev-qa-db-ja.com

Log4jを使用してパッケージのログレベルを変更するにはどうすればよいですか?

次のバグが発生しました。

http://issues.Apache.org/jira/browse/AXIS2-436

次のように述べています。

このエラーはorg.Apache.axiomのログレベルがDEBUGの場合にのみ発生するため、回避策はログレベル> DEBUGを設定することです。

私の質問は、それをどのように行うのですか?私はディレクトリをプロパティファイルまたは何かのために探していて、コードで設定できるものがあるかどうかを探していましたが、私は本当に何をしているのか分かりません。これを機能させるために、デスクトップでコンソールアプリを実行しています。

更新1:Axis2ディレクトリのルートに独自のlog4j.propertiesファイルがあることに気付きました。これは安全に無視されますか、それともソリ​​ューションの一部(または問題の一部)ですか?

更新2:ルートレベルのlog4j.propertiesファイルは、明らかに正しく設定されていません。現在、次のようになっています。

log4j.rootLogger=DEBUG, R 
log4j.logger.org.Apache.axiom=WARN
log4j.appender.R=org.Apache.log4j.RollingFileAppender 
log4j.appender.R.MaxFileSize=10MB 
log4j.appender.R.MaxBackupIndex=10 
log4j.appender.R.layout=org.Apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

しかし、このコードは「ログレベルがnull」を返すため、明らかに間違っています。

System.out.println("Log level is " + logger.getLevel());

今のところ、私はコードでログレベルを設定しています

Logger logger = Logger.getLogger("org.Apache.axiom");
logger.setLevel(Level.WARN);
56
Ryan Elkins

どのアプリサーバーを使用していますか?ロギング設定はそれぞれ異なる場所に配置されますが、最近ではほとんどの場合、Commons-LoggingがLog4JまたはJava.util.loggingのラッパーとして使用されます。

Tomcatを例として使用して、 このドキュメント は、いずれかのオプションを使用してロギングを設定するためのオプションを説明しています。いずれの場合も、各パッケージのログレベルとログシステムがログ情報を出力する場所(通常はコンソール、ファイル、またはdb)を定義する構成ファイルを検索または作成する必要があります。

Log4jの場合、これはlog4j.propertiesファイルになり、上記のリンクの指示に従うと、ファイルは次のようになります。

log4j.rootLogger=DEBUG, R 
log4j.appender.R=org.Apache.log4j.RollingFileAppender 
log4j.appender.R.File=${catalina.home}/logs/Tomcat.log 
log4j.appender.R.MaxFileSize=10MB 
log4j.appender.R.MaxBackupIndex=10 
log4j.appender.R.layout=org.Apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

最も簡単なのは、行を変更することです。

log4j.rootLogger=DEBUG, R

次のようなものに:

log4j.rootLogger=WARN, R

ただし、独自のクラスから独自のDEBUGレベルの出力が必要な場合は、次の行を追加します。

log4j.category.com.mypackage=DEBUG

Log4J および Commons-Logging を少し読むと、このすべてを理解するのに役立ちます。

59
Benjamin Cox

今日、まったく同じ問題に遭遇しました、ライアン。

私のsrc(またはルート)ディレクトリで、私のlog4j.propertiesファイルには次の追加があります

# https://issues.Apache.org/jira/browse/AXIS2-4363
log4j.category.org.Apache.axiom=WARN

これを行う方法について頭を上げてくれてありがとう、ベンジャミン。

9
ian_scho

私のこの仕事:

log4j.logger.org.hibernate.type=trace

また試すことができます:

log4j.category.org.hibernate.type=trace
3
msangel

私はこの問題に遭遇したばかりで、上記のすべてとそこにあるすべてを読んだ後でも何が悪いのか理解できませんでした。私がしたことは

  1. ルートロガーレベルをWARNに設定します
  2. パッケージログレベルをDEBUGに設定します

各ロギングの実装には、プロパティまたはコードを介して設定する独自の方法があります(多くのヘルプが利用できます)

上記のすべてに関係なく、コンソールまたはログファイルにログが記録されません。私が見落としていたのは以下です...


enter image description here


上記のジャグラリーで行っていたのは、ログの生成(ルート/パッケージ/クラスなど)のみを制御することでした(上の画像の赤い線の左側)。しかし、上の画像の赤い線の右側の同じログの表示/消費の方法を変更していませんでした。 Handler(Consumption)は通常INFOにデフォルト設定されているため、貴重なデバッグステートメントは処理されません。消費/表示は、ハンドラー(ConsoleHandler/FileHandlerなど)のログレベルを設定することで制御されます。そこで、先に進み、すべてのハンドラーのログレベルを最高に設定し、すべてが機能するようにしました。

この点は、いかなる場所においても正確な方法で明らかにされませんでした。

プロパティが機能していない理由を考えて、誰かが頭を掻いて、このビットが役立つことを願っています。

2
kaza

システムプロパティlog4j.debug = trueを設定します。その後、構成がどこで実行されているかを判断できます。

0
James Armstrong