導入
SLF4J の正式名称は「Simple Logging Facade for Java」で、さまざまなロギング フレームワークの単純なファサードとして機能します。例: java.util.logging、logback、reload4j など。ロギング フレームワークは、ロギング フレームワークの jar パッケージの依存関係を切り替えることによってのみ切り替えることができます。
SLF4J でサポートされているロギング フレームワークには、次のものが含まれます。
- log4j: 一般的に使用されるログ フレームワークで、構成ファイル log4j.properties が必要です。
- logback: logback.xml を使用してログ出力構成を変更できます。logback.xml がない場合はデフォルト構成を使用できます。
- java.util.logging:JDK 1.4 ロギング
- simple: シンプルな実装、INFO 以上の表示レベルのみ、実際に System.err 出力を使用
- jcl:ジャカルタ・コモンズ・ロギング
- nop: すべてのログをサイレントに表示しない
使用例
1. 依存する jar パッケージを導入する
SLF4J は現在 2.X バージョンをリリースしていますが、例として頻繁に使用されるバージョン 1.7.36 を以下に示します。
シンプルな Maven プロジェクトを作成し、依存関係を導入します。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
<!-- log4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-reload4j</artifactId>
<version>1.7.36</version>
</dependency>
<!-- logback
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency> -->
<!-- 简单实现,只显示INFO以上级别,实际使用System.err输出
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.36</version>
</dependency> -->
<!-- jdk14
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.7.36</version>
</dependency> -->
<!-- nop 无提示不显示所有日志
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.36</version>
</dependency>-->
<!-- Jakarta Commons Logging
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jcl</artifactId>
<version>1.7.36</version>
</dependency> -->
2. コードの使用例
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogTest {
private final static Logger log = LoggerFactory.getLogger(LogTest.class);
public static void main(String[] args) {
log.info("这个是测试日志输出,{}","Hello World");
}
}
1) log4j を使用する場合は、設定ファイルを追加する必要がありますlog4j.properties
. そのような設定ファイルがない場合、ログを印刷することはできません. 簡単な内容は次のとおりです.
# Root logger option
log4j.rootLogger=INFO,file,stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{2}:%L - %m%n
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=log/output-log4j.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{2}:%L - %m%n
2) logback を使用する場合は、構成ファイルを追加することもできますlogback.xml
. そのような構成ファイルがない場合は、デフォルトの構成を使用します. 内容は次のとおりです:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
<file>log/output-logback.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>log/output.log.%i</fileNamePattern>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>1MB</MaxFileSize>
</triggeringPolicy>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
3. 印刷内容のテスト
1) log4j
2023-03-10 14:55:54 [main] INFO demo.LogTest:9 - 这个是测试日志输出,Hello World
2023-03-10 14:55:56 [main] INFO demo.LogTest:9 - 这个是测试日志输出,Hello World
2)ログバック
2023-03-10 14:53:21 [main] INFO cn.hj.sl4j.demo.LogTest - 这个是测试日志输出,Hello World
2023-03-10 14:53:33 [main] INFO cn.hj.sl4j.demo.LogTest - 这个是测试日志输出,Hello World
3)slf4j-シンプル
[main] INFO cn.hj.sl4j.demo.LogTest - 这个是测试日志输出,Hello World
4) slf4j-jdk14
三月 10, 2023 3:00:53 下午 cn.hj.sl4j.demo.LogTest main
信息: 这个是测试日志输出,Hello World
5)JCL
三月 10, 2023 3:01:31 下午 org.slf4j.impl.JCLLoggerAdapter info
信息: 这个是测试日志输出,Hello World
要約する
SLF4Jは、ログの利用基準を統一したファサードログフレームワークであり、異なるログ実装を切り替えたい場合は、対応する実装依存のjarパッケージを変更するだけでよく、Javaコードを変更する必要はありません。