web-dev-qa-db-ja.com

Javaアプリケーション:Log4jをEclipse環境内で機能させる

Eclipseと私のJavaアプリケーションがlog4j.propertiesファイルを使用するようにセットアップするために最善を尽くしました。しかし、プロパティファイルを使用していないようで、よくわかりません。なぜ。

ライブラリ:slf4j-api-1.6.1、slf4j-jdk14-1.6.1

アプリケーション内では、ロギングは正常に機能します。情報、警告、およびエラーをEclipseコンソールに出力できます。

私ができるようにしたいのは、ログレベルを変更して、すべてのログメッセージをデバッグし、コンソールとログファイルの両方に出力することです。

次のようなlog4j.propertiesファイルを作成しました。

log4j.rootLogger=DEBUG,console,file
log4j.rootCategory=DEBUG, R, O

# Stdout
log4j.appender.O=org.Apache.log4j.ConsoleAppender

# File
log4j.appender.R=org.Apache.log4j.RollingFileAppender
log4j.appender.R.File=log4j.log

# Control the maximum log file size
log4j.appender.R.MaxFileSize=100KB

# Archive log files (one backup file here)
log4j.appender.R.MaxBackupIndex=5
log4j.appender.file.File=checkLog.log
log4j.appender.file.threshold=DEBUG

log4j.appender.R.layout=org.Apache.log4j.PatternLayout
log4j.appender.O.layout=org.Apache.log4j.PatternLayout

log4j.appender.R.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n
log4j.appender.O.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n

私のディレクトリ構造は次のようになります。

My Project
--src/
----MYProject/
------*.Java
--bin/
----MYProject/
------*.class
--log4j/
----log4j.properties

Eclipseではこれは次のとおりです。

実行構成->クラスパス(タブ)->、右クリックユーザーエントリ->「log4j」を新しいフォルダとして追加し、保存しました。

次に、私のコードでは、次のようにロガーを呼び出します(構文エラーが発生する可能性があるため、アプローチを示すサンプルコード)。

package MYProject;
import org.slf4j.LoggerFactory;

public class MyClass{

  final org.slf4j.Logger test_logger = LoggerFactory.getLogger(MyClass.class);

  public MyClass(){}

  public someMethod(){
    test_logger.debug("Some Debug");
    test_logger.info("Some Info");
    test_logger.warn("Some Warning");
    test_logger.error("An Error");
  }

}

次に、someMethodを呼び出すと、INFOWARNERRORがEclipseコンソールに出力されます。 DEBUGは出力されず、ファイルにも出力されません。

私が間違っているかもしれないことについての提案をいただければ幸いです。

12
Bryce

log4j.propertiesの前のクラスパスに別のlog4j.xmlまたはlog4j.propertiesファイルがある可能性があります。プロジェクトの実行構成を開き、-Dlog4j.debug=trueをVMプロジェクトの引数として追加します。これにより、構成を含む多くの追加情報をコンソールに出力するようにlog4jに指示されます。使用しているファイル。

17
Jason Day

ロギングファサードを使用している場合slf4jの場合、対応するjarファイルを含めることにより、正確にoneのロギングバックエンドを指定する必要があります。そのバックエンド。あなたの場合、クラスパスにslf4j-jdk14-x.x.x.jarをインストールしました。これは単なる一般的なロガーバックエンドです。

log4jバックエンドを使用するには、slf4j-jdk14-x.x.x.jarを削除し、slf4j-log4j12-x.x.x.jarに置き換える必要があります。削除しない場合、slf4jはバックエンドjarを1つだけ選択する必要があり、おそらく必要なものではありません。

もちろん、クラスパスにも実際のlog4j-x.x.x.jarファイルが必要です。

これらのjarが適切に配置されると、-Dlog4j.debugのVMパラメーターが実際に機能し、ログ構成の取得元のデバッグに役立ちます。

3
broc.seib

プロパティファイルを使用するようにコードに指示する必要があります。ロギングを行う前に、

PropertyConfigurator.configure("log4j/log4j.properties");
2
apines

ターゲットディレクトリに古いバージョンがある可能性があります。プロジェクトをクリーンアップして、再試行してください。

それとは別に、Eclipseを介してlog4j.propertiesを追加しなかった場合は、必ずEclipseプロジェクトを更新にする必要があります。

0
lilalinux

パスプロジェクトプロパティ/ライブラリタブでプロジェクトのjre(JREシステムライブラリ)を削除し、jreを再設定してください!

0
Fereydoun