tsalakh ain sus noam Huyah ol guf

勉強会のメモ。その他備忘録。参考にさせて頂いたサイトや資料はリンクさせて頂いていますが不都合があればご連絡ください。

【技術メモ】簡単3-Stepで、LogBack+SLF4Jでログを出力する

LogBack+SLF4Jでログを出力する

概要

Javaで、LogBackとSLF4Jで、ログを出すまでの手順

ステップ

  1. Mavenの依存性を追加
  2. logback.xmlを用意
  3. Loggerを宣言して、ログ出力

詳細

Mavenの依存性を追加

logback-classicを追加すれば、ほぼほぼ入る。あとslf4j-simple

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

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.25</version>
    </dependency>

logback.xmlを用意

  • appender で出力先を設定
  • logger で出力対象のロガーを指定(対象パッケージを指定)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE logback>
<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
  </appender>

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>/usr/local/var/log/myapp/app.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>/usr/local/var/log/myapp/app.log.%d{yyyyMMdd}</fileNamePattern>
      <maxHistory>14</maxHistory>
    </rollingPolicy>

    <encoder>
      <!-- %Xだけにすると「traceId=xxx,spanId=xxx,spanExportable=false,X-Span-Export=false,X-B3-SpanId=xxx,X-B3-TraceId=xxx」が出る -->
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}^%-5level^%logger{0}:%L^%X{traceId}^%X{spanId}^%msg%n</pattern>
    </encoder>
  </appender>

  <logger name="xyz.chamc" level="info" additivity="false">
    <appender-ref ref="FILE" />
  </logger>

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

Loggerを宣言して、ログ出力

  • org.slf4j.Loggerをstatic finalで宣言
  • org.slf4j.LoggerFactoryで引数に自分のクラスを指定
    • ここは一意に名前がつけばいいので、自クラス名が手っ取り早い
  • logger.xxx()でログ出力を実装
package xyz.chamc.example;

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

@SpringBootApplication
@RestController
@RequestMapping("/api")
public class TheController {

    private static Logger logger = LoggerFactory.getLogger(TheController.class);

    @RequestMapping("/call")
    public String call() {
        logger.info("START: call().");

        logger.info("END: call().");
        return "You call API !";
    }
}

参考リンク

SpringBootでいつも出るWARNの対処法