Spring Logging

インターフェースと実装が別れている
slf4j: インターフェース
logback: 実装
spring-starter-webにはlogbackがデフォルトで依存されている
console出力, ファイル出力は公式でappenderが作ってある

spring-boot/base.xml at main · spring-projects/spring-boot

logback-spring.xml を書けば良い

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
						<pattern>...</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
 
    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

ログのJSON化

LogstashのLogback JSON encoderで、Logbackで出力するログをJSONエンコードする - CLOVER🍀

2つある

logback-contrib/jackson

こっちを使用

ch.qos.logback.contrib : logback-jackson - maven + code for add to pom.xml | JarCasting

GitHub - qos-ch/logback-contrib: logback contributions project reserved for contributors with CLAs on file

メンテナンスされてない & スター少ない & StructuredArgumentsが使えない

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
                <jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
                    <prettyPrint>true</prettyPrint>
                </jsonFormatter>
                <timestampFormat>yyyy-MM-dd'T'HH:mm:ss.SSSXXX</timestampFormat>
                <includeContextName>false</includeContextName>
                <appendLineSeparator>true</appendLineSeparator>
            </layout>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
 
    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

logstach-logback-encoder

メンテナンスされている & スター多い

GitHub - logstash/logstash-logback-encoder: Logback JSON encoder and appenders

appendEntries が使えるので独自のフィールドをJSONログに持たせる事ができる

application.yamlの値を使う

<springProperty name="VAR_NAME" resource="yml_path"/> なるものがあるらしい

${VAR_NAME} で参照出来る

spring で logback を使う際に application.yml の値を使う - nise_nabeの日記

Spring Profile

環境ごとに挙動を分けたいときにつかう

デフォルトはデフォルトプロファイル(dev とかではない)

Springのプロファイル機能、そしてSpring Bootのapplication.properties - Qiita