トッカンソフトウェア

Logbackでログ出力

今回はLogbackを使用してログを出力してみます。


環境構築

Mavenのpom.xmlに以下を追加します。
				
<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>javaTest2</groupId>
	<artifactId>javaTest2</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.0</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<dependencies>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.2.3</version>
		</dependency>
	</dependencies>
</project>

			

logback.xmlの作成

				
<configuration>

	<appender name="STDOUT"
		class="ch.qos.logback.core.ConsoleAppender">
		<!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder 
			by default -->
		<encoder>
			<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
			</pattern>
		</encoder>
	</appender>

	<appender name="FILE"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>logFile.log</file>
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

			<fileNamePattern>logFile.%d{yyyyMMddHH}.log</fileNamePattern>

			<maxHistory>30</maxHistory>
			<totalSizeCap>3GB</totalSizeCap>

		</rollingPolicy>

		<encoder>
			<pattern>%d{HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg%n
			</pattern>
		</encoder>
	</appender>

	<root level="debug">
		<appender-ref ref="FILE" />
		<appender-ref ref="STDOUT" />
	</root>
</configuration>

			
logback.xmlはクラスパスが通っている場所に置きます。わからなかったらsrcフォルダ直下に置いてください。


Javaファイルにログ出力処理の埋め込み

				
package javaTest2;

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

public class Test {
	static Logger logger = LoggerFactory.getLogger(Test.class);

	public static void main(String[] args) {

		logger.trace("Test_trace");
		logger.debug("Test_debug");
		logger.info("Test_info");
		logger.warn("Test_warn");
		logger.error("Test_error");

	}
}

			
コンソール出力
				
23:25:45.341 [main] DEBUG javaTest2.Test - Test_debug
23:25:45.345 [main] INFO  javaTest2.Test - Test_info
23:25:45.345 [main] WARN  javaTest2.Test - Test_warn
23:25:45.345 [main] ERROR javaTest2.Test - Test_error

			
ファイル出力
				
23:25:45.341 434  [main] DEBUG javaTest2.Test - Test_debug
23:25:45.345 438  [main] INFO  javaTest2.Test - Test_info
23:25:45.345 438  [main] WARN  javaTest2.Test - Test_warn
23:25:45.345 438  [main] ERROR javaTest2.Test - Test_error

			

<appender>

ログの出力方式、出力内容を定義します。

classで出力先を指定します。
class 出力先
ch.qos.logback.core.ConsoleAppender コンソールに出力
ch.qos.logback.core.rolling.RollingFileAppender ファイルに出力


encoderのpatternで出力内容を定義します。
変換指定子 効果
%d 日時。{HH:mm:ss.SSS}を付けると時、分、秒、ミリ秒。
%relative 経過時間。ミリ秒。
%thread スレッド。
%level DEBUG、INFOなど。
%logger ログ出力クラス。{数値}クラスを出力する長さ。指定より長い場合はパケージ名を省略。{0}クラスのみ。
%msg メッセージ。
%n 改行。
%line 行番号。遅い。

ファイル出力のみの設定
fileでログファイル名を指定します。

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">で古いログを別ファイルにすることができます。
指定 内容
fileNamePattern 過去ログファイル名を指定。拡張子を.zipにすると圧縮ファイルになります。
maxHistory 過去ログファイルの最大数
totalSizeCap 過去ログファイルの合計サイズ


<root>

ログを出力するappenderを指定します。levelを指定すると指定したレベルとそれより上のレベルのみログを出力します。

レベルの順
trace → debug → info → warn → error

logger

loggerを指定するとクラスやパッケージ毎にログを出力できます。

loggerのnameには、クラス名やパッケージ名を指定できます。

JavaソースでLoggerFactory.getLoggerに自身のクラスを渡すと、loggerのnameと一致する設定のログが出力されます。

例えば、クラスが javaTest2.ko.TestKo の場合、loggerのnameを
javaTest2、javaTest2.ko、javaTest2.ko.TestKo のどれを指定してもログ出力対象になり、
設定したすべてで出力されます。
※ <root>の設定でも出力されます

loggerでもlevelの指定ができます。指定したlevelよりレベルの低いログはrootや親パッケージの設定でもログ出力されません。

additivity="false" を付けるとrootや親パッケージで指定したログの出力を行いません。

logback.xml
				
<configuration>

	<appender name="STDOUT"
		class="ch.qos.logback.core.ConsoleAppender">
		<!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder 
			by default -->
		<encoder>
			<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
			</pattern>
		</encoder>
	</appender>

	<appender name="FILE"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>logFile.log</file>
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

			<fileNamePattern>logFile.%d{yyyyMMddHH}.log</fileNamePattern>

			<maxHistory>30</maxHistory>
			<totalSizeCap>3GB</totalSizeCap>

		</rollingPolicy>

		<encoder>
			<pattern>%d{HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg%n
			</pattern>
		</encoder>
	</appender>

	<logger name="javaTest2.ko.TestKo" additivity="false" level="debug">
		<appender-ref ref="STDOUT" />
	</logger>

	<root level="debug">
		<appender-ref ref="FILE" />
	</root>
</configuration>

			
TestKo.java
				
package javaTest2.ko;

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

public class TestKo {
	static Logger logger = LoggerFactory.getLogger(TestKo.class);

	public static void main(String[] args) {

		logger.trace("Ko_trace");
		logger.debug("Ko_debug");
		logger.info("Ko_info");
		logger.warn("Ko_warn");
		logger.error("Ko_error");

	}
}

			
ファイル出力(コンソールには出力されない)
				
09:16:47.113 328  [main] DEBUG javaTest2.ko.TestKo - Ko_debug
09:16:47.116 331  [main] INFO  javaTest2.ko.TestKo - Ko_info
09:16:47.116 331  [main] WARN  javaTest2.ko.TestKo - Ko_warn
09:16:47.116 331  [main] ERROR javaTest2.ko.TestKo - Ko_error

			



ページのトップへ戻る