LogbackとSLF4jでテキストファイルにログを出力するサンプルです。
xmlの設定ファイルを使用します。(確認環境:Java8,Windows10)
目次
サンプル | logbackとSLF4jとは |
logbackとSLF4jの取得 | |
設定ファイルの作成(logback.xml) | |
slf4jでログを出力する | |
出力ファイルの確認 |
logbackとSLF4jとは
- logbackは、ログを出力するライブラリです。
- SLF4jと組み合わせて使う前提です。
- 以下は、logbackのJavadocです。
https://logback.qos.ch/apidocs/index.html
SLF4jとは
- SLF4jは、ログファサード(Facade)ライブラリです。
- SLF4Jは、ログ出力の抽象層です。あるログから別のログに移行できる設計です。
(例、java.util.logging、logback、log4j) - 以下は、SLF4jのJavadocとSLF4jのページのリンクです。
https://www.slf4j.org/apidocs/index.html
https://www.slf4j.org/
logbackとSLF4jの取得
1.Mavenで取得する場合
pom.xmlの<dependencies>の間に以下のコードを追加します。
※バージョンは新しいものが出ているか確認して下さい。
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.7</version>
<scope>test</scope>
</dependency>
※確認環境では、jarは取得しましたがorg.slf4j.Logger等が参照できずエラーになりました。
エラーが解消しない場合はjarファイルで取得します。
2.jarファイルで取得する場合
以下3つのjarファイルを取得しクラスパスに追加します。
※バージョンは新しいものが出ているか確認して下さい。
logback-classic-1.2.3.jar
logback-core-1.2.3.jar
slf4j-api-1.7.25.jar
Logbackのサイト
https://logback.qos.ch/download.html
mvnrepositoryのサイト
https://mvnrepository.com/artifact/ch.qos.logback
クラスパスに追加する手順は、以下を参照願います。
Eclipse jarファイルをクラスパスに設定する方法
設定ファイルの作成(logback.xml)
logback.xmlというファイルを作成しコードを記述します。logback.xmlはなくても動きます。
<configuration>
<property name="logDir" value="./log/" />
<property name="fileName" value="testlog.log" />
<property name="format1" value="%d{yyyy/MM/dd HH:mm:ss.SSS} [%t] %-6p %c{10} %m%n" />
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logDir}${fileName}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logDir}${fileName}.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>1</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${format1}</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${format1}</pattern>
</encoder>
</appender>
<root level="trace">
<appender-ref ref="FILE" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
3行目のpropertyタグは、変数の設定です。nameの値を変数として使用しています。(例:3行目のlogDirは8,11行目で使用されている)
7行目のappenderタグは、ファイル出力の設定です。
20行目のappenderタグは、コンソール出力の設定です。
26行目のrootタグのlevelには、TRACE、DEBUG、INFO、WARN、ERROR、ALL、OFFのいずれかを指定します。小文字でも可です。WARNを設定するとログはWARNとERRORのみ出力されます。
27行目のappender-refは、参照しているアペンダーがロガーに割り当てられます。
xmlファイルの配置先
フォルダを作成してフォルダにビルドパスを追加しその中にlogback.xmlを置きます。
Eclipse フォルダを作成してビルドパスに設定する手順
slf4jでログを出力する
slf4jでログを出力する場合です。lombokで記述量を減らせます。
package test1;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Test1 {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger("Sample");
// Logger logger = LoggerFactory.getLogger(Test1.class);
int a = 1;
int b = 2;
logger.trace("trace"); // 2017/01/24 18:19:02.512 [main] TRACE Sample trace
logger.debug("debug"); // 2017/01/24 18:19:02.514 [main] DEBUG Sample debug
logger.info("情報={}", a); // 2017/01/24 18:19:02.515 [main] INFO Sample 情報=1
logger.warn("警告={}{}", a, b); // 2017/01/24 18:19:02.516 [main] WARN Sample 警告=12
try {
throw new NullPointerException();
}catch(Exception e) {
logger.error("エラー", e); // 2017/01/24 18:19:02.516 [main] ERROR Sample エラー
} // java.lang.NullPointerException: null
}
}
9行目の引数は、文字列またはクラスを指定できます。ログに出力されるので検索で使用できます。
一般的にはクラスを指定します。
17,18行目は、文字列の中に値を代入しています。
23行目は、例外のインスタンスを引数にしています。
出力ファイルの確認
実行するとコンソールとxmlの3行目のフォルダにログファイルが出力されます。
(プロジェクトフォルダのlogフォルダ配下にtestlog.logが出力)
ログファイルが存在しない場合は新規に作成されます。
ログファイルが存在する場合は追記されます。
出力されるログは以下の通りです。
2017/01/24 18:19:02.512 [main] TRACE Sample trace
2017/01/24 18:19:02.514 [main] DEBUG Sample debug
2017/01/24 18:19:02.515 [main] INFO Sample info: 1
2017/01/24 18:19:02.516 [main] WARN Sample warn: 12
2017/01/24 18:19:02.516 [main] ERROR Sample error: null
関連の記事
Java log4j2でテキストにログを出力するサンプル
Java log4j 1.2でテキストにログを出力(テキストで設定)
Java log4j 1.2でテキストにログを出力(xmlで設定)
Java log4j 1.2でコンソールにログを出力するサンプル