1.pom.xml設定
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>logging-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
</dependency>
</dependencies>
</project>
2. log4j.properties設定
logsディレクトリは手動で作成が必要です
# ルートロガーの設定:コンソールとファイルへの出力
log4j.rootCategory=DEBUG, console,mainFile
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c{1}: %m%n
# メインログファイルへの出力設定
log4j.appender.mainFile = org.apache.log4j.FileAppender
log4j.appender.mainFile.File = logs/application.log
log4j.appender.mainFile.layout = org.apache.log4j.PatternLayout
log4j.appender.mainFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
# サービスA用ログファイル設定
log4j.logger.serviceA=INFO,serviceAFile
log4j.appender.serviceAFile = org.apache.log4j.FileAppender
log4j.appender.serviceAFile.File = logs/service_a.log
log4j.appender.serviceAFile.layout = org.apache.log4j.PatternLayout
log4j.appender.serviceAFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
# サービスB用ログファイル設定
log4j.logger.serviceB=INFO,serviceBFile
log4j.appender.serviceBFile = org.apache.log4j.FileAppender
log4j.appender.serviceBFile.File = logs/service_b.log
log4j.appender.serviceBFile.layout = org.apache.log4j.PatternLayout
log4j.appender.serviceBFile.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n
3. テストコード例
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LoggingDemo {
private static final Logger mainLogger = LoggerFactory.getLogger(LoggingDemo.class);
private static final Logger serviceALogger = LoggerFactory.getLogger("serviceA");
private static final Logger serviceBLogger = LoggerFactory.getLogger("serviceB");
public static void main(String [] args){
// メインロガー:application.logに出力
mainLogger.info("アプリケーション開始");
// サービスAロガー:application.logとservice_a.logに出力
serviceALogger.info("サービスA処理開始");
// サービスBロガー:application.logとservice_b.logに出力
serviceBLogger.info("サービスB処理開始");
// 全てのロガーがコンソールにも出力
mainLogger.debug("デバッグ情報");
}
}
4.実行結果: 全てのログがコンソールとapplication.logに出力されます。serviceALoggerからのログはさらにservice_a.logにも、serviceBLoggerからのログはservice_b.logにも記録されます。