私は次のインポートを持っています:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
および次のインスタンス化:
private static Logger logger = LoggerFactory.getLogger(Test.class);
私のメインメソッドでは次のとおりです:
logger.info("SOME MESSAGE: ");
しかし、どこにも出力を見つけることができません。私が見るすべては私のコンソールにあるということです:
21:21:24.235 [main] INFO some_folder.Test - SOME MESSAGE:
ログファイルを見つけるにはどうすればよいですか?
ビルドパスには次のものがあります。
slf4j-api-1.7.5.jar
slf4j-log4j12-1.6.4.jar
私は同様の質問に対する答えを読みましたが、実際に問題を解決する方法を言う人はいません。
slf4jはAPIのみです。具体的な実装(log4jなど)が必要です。この具体的な実装には、ログの保存場所を指定する構成ファイルがあります。
Slf4jがロガーでログメッセージをキャッチすると、メッセージの処理方法を決定するアペンダーに渡されます。デフォルトでは、ConsoleAppenderはコンソールにメッセージを表示します。
デフォルトの構成ファイルは次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<!-- By default => console -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
構成ファイルをクラスパスで使用可能にすると、具体的な実装(この場合はlog4j)がそれを見つけて使用します。 Log4Jのドキュメント を参照してください
ファイルアペンダーの例:
<Appenders>
<File name="File" fileName="${filename}">
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
</File>
...
</Appenders>
ファイルアペンダーを使用した完全な例:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<File name="File" fileName="${filename}">
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
すでに述べたように、その外観は単なるものであり、異なるロガーの実装を簡単に切り替えるのに役立ちます。たとえば、log4j実装を使用する場合。
サンプルコードは次のようになります。
Mavenを使用する場合、依存関係を取得します
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
Src/main/resources/log4j.propertiesの場所のlog4j.propertiesに以下を用意します。
log4j.rootLogger=DEBUG, STDOUT, file
log4j.appender.STDOUT=org.Apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.Apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
log4j.appender.file=org.Apache.log4j.RollingFileAppender
log4j.appender.file.File=mylogs.log
log4j.appender.file.layout=org.Apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{dd-MM-yyyy HH:mm:ss} %-5p %c{1}:%L - %m%n
以下のHello Worldコードは、上記の構成に従ってコンソールおよびログファイルに出力されます。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");
}
}
デフォルトではファイルに書き込みません。 RollingFileAppender
のようなものを構成し、ルートロガーに書き込みを行う必要があります(デフォルトのConsoleAppender
に加えて)。
Slf4j構成ファイルの場所を次の引数を使用してJava runコマンドに渡す必要があるため、ログファイルは表示されません。
-Dlogging.config = {file_location}\log4j2.xml
-Dlog4j.configurationFile = {file_location}\log4j2.xml