web-dev-qa-db-ja.com

slf4jはどのように機能しますか?ログは作成されません

以下のコードはJava 1.6:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private static Logger log = LoggerFactory.getLogger(myfile.class);

ここで、slf4j-api-1.6.4.jarとslf4j-simple-1.6.4.jarをクラスパスに配置すると、コードは正常にコンパイルされますが、すべての情報はどこに記録されますか????

Log.info( "test");を実行しました。ただし、ログファイルは作成されません。以下の内容でlog4j.propertiesを作成してみました。

log4j.appender.stdout=org.Apache.log4j.RollingFileAppender
log4j.appender.stdout.File=/var/abc.log
log4j.appender.stdout.layout=org.Apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d{dd-MMM-yyyy HH:mm:ss}]%6p %c{1}:%L - %m%n
log4j.appender.stdout.MaxFileSize=50000KB
log4j.appender.stdout.MaxBackupIndex=200

log4j.rootLogger=info, stdout

しかし、それは機能していません。log4jには上記のファイルが必要ですが、slf4jはどのように機能しますか? log4jに似たプロパティファイルを作成する必要がありますか?もしそうなら、どこに置く必要がありますか?

ありがとう!

20
Mike

SLF4Jは、さまざまなロギングフレームワークを簡単に切り替えることができる単なるファサードです。SLF4JAPIを使用するすべてのロギング呼び出しは、基盤となるロギングフレームワークに委任されます。

SLF4Jのプロパティファイルを作成する必要はありません。必要なのは、ロギングフレームワークに一致する正しい「SLF4Jバインディング」jarを使用して、SLF4JAPIのすべてのロギング呼び出しを基盤となるロギングフレームワークに委任することです。次の図は、SLF4J、「SLF4Jバインディング」、および基盤となるロギングフレームワーク間の関係を示しています。

enter image description here

slf4j-simple-1.6.4.jarはすべてのイベントをSystem.errに委任しますが、log4j APIには委任しません。したがって、代わりにslf4j-log4j12-1.6.4.jarを使用する必要があります。

要約すると、次のjarを使用する必要があります。

  • slf4j-api-1.6.4.jar
  • slf4j-log4j12-1.6.4.jar
  • log4j-1.2.16.jar

参照

39
Ken Chan

SLF4Jは単なるロギングの抽象化であり、ログ自体は書き込みません。使用 Logback -SLF4Jをネイティブに実装し、SLF4Jとlog4jを書いたのと同じ人によって書かれています。 SLF4JとLogbackは優れたフレームワークです。SLF4Jが他のフレームワーク(JUL、Commons Logging、log4j)を選択したフレームワーク(Logback)にブリッジする方法が気に入っています。

1
Paul

Slf4j-api(jar)を使用しました。依存関係(jar)のlogback-coreをlogback-classicに置き換えてから、ロギングを開始しました。

0
ddsultan