4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Mavenでslf4j+logbackでログを外部ファイルに出力する

Last updated at Posted at 2019-02-10

初投稿です。
至らぬ点も多々あると思いますが、よろしくお願い致します。

※20190303 spring-boot-starterにAPIが含まれていたため、
spring-boot-starterをmavenから外して再度環境構築しました。

ログをファイルに出力したい

slf4jの導入をきちんとした事が無かったので、この機会にやってみました。
ゴール

  • Eclipseのコンソールと、ログファイルにログを出力させる。
  • 使うAPIはslf4jとlogback

開発環境

  • java 1.8
  • maven

必要なAPI

  • slf4j-api:jar実行時にログを出力する
  • logback-classic:ログをファイルに出力する
  • logback-core:ログをファイルに出力する

その他必要なもの

  • logback.xml

logback.xmlの定義

logback.xmlの定義については、かなり詳しくまとめられたサイトを参考に致しました。ご参考にして頂ければと思います。
Logback 使い方メモ

ちなみに私は次のように定義しました。

logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE logback>
<configuration>
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
	    <encoder>
	        <pattern>%date{yyyy-MM-dd HH:mm:ss} [%thread] %level %logger{0} - %msg \(%file:%line\)%n</pattern>
	    </encoder>
	    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
	        <level>DEBUG</level>
	    </filter>
	</appender>

	<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
	    <file>logs/app.log</file>
	    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
	        <fileNamePattern>logs/app.%d{yyyy-MM-dd}.log.tar.gz</fileNamePattern>
	        <maxHistory>7</maxHistory>
	    </rollingPolicy>
	    <encoder>
	        <pattern>%d{yyyy-MM-dd'T'HH:mm:ss'Z'} - %m%n</pattern>
	    </encoder>
	</appender>

	<root level="DEBUG" additivity="false">
	    <appender-ref ref="STDOUT" />
	    <appender-ref ref="FILE" />
	</root>

</configuration>

pom.xmlの定義

必要なAPIを、mavenのdependencyに定義してみました(これ間違いです)。

pom.xml
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.3</version>
</dependency>

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.1.3</version>
</dependency>

で、次のソースを書いて実行。

main.java
public class App
{
    private static Logger log = LoggerFactory.getLogger("test");
    public static void main( String[] args )
    {
    	log.debug("ログ出力テスト");
    	log.info("ログ出力テスト");
    	log.warn("ログ出力テスト");
    	log.error("ログ出力テスト");
    }
}

コンソールログに出力!

console.log

2019-03-03 14:56:28testtest [main] DEBUG test - ログ出力テスト (App.java:19)
2019-03-03 14:56:28testtest [main] INFO test - ログ出力テスト (App.java:20)
2019-03-03 14:56:28testtest [main] WARN test - ログ出力テスト (App.java:21)
2019-03-03 14:56:28testtest [main] ERROR test - ログ出力テスト (App.java:22)

ログファイルにも出力!

app.log
2019-03-03T14:56:28Z - ログ出力テスト
2019-03-03T14:56:28Z - ログ出力テスト
2019-03-03T14:56:28Z - ログ出力テスト
2019-03-03T14:56:28Z - ログ出力テスト

無事に出力されました。

因みに次のエラーが発生した場合はAPIがブッキングしている可能性があります。

SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#noProviders for further details.

この記事を書いた時も発生したのですが、当初はlogback-classicとlogback-coreがslf4j-apiに含まれていると思っていました。
しかし実際に含まれていたのはspring-boot-starterで、logback-classic、logback-coreは本当は必須でした。

参考サイト

Logback 使い方メモ

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?