Java基礎ー標準出力とロガー

標準出力

標準出力はコンソールに引数に渡された値を出力する。

public class Main {

    public static void main(String[] args) {
        String name = "山田";
        int age = 30;
        // 標準出力はコンソールに引数に渡された値を出力する
        System.out.println("私の名前は" + name + "です。\n年齢は" + age + "歳です。");
        System.out.printf("私の名前は%sです。\n年齢は%d歳です。\n", name, age);
    }
}

ロガー

ログとは:起こった出来事についての情報などを時間経過にそって記録する履歴のこと。

ログに残したい内容には以下のものがある。

  • 使用している設定値や詳細な情報表示などデバッグ用の表示
  • 正常動作の記録
  • 警告を出しておきたい動作の記録
  • エラーなどの問題の記録
  • 停止してしまうような致命的な記録

ログを残す目的

  • エラーの原因の究明
  • システムが使われている際の状況を把握する

ログには内容の重要性などによってログレベルを設定する。
slf4j + logbackにおけるログレベルは以下の通り。
下に行くほどログの重要度が高くなっている。

ログレベル 内容
TRACE 実行処理を判別できる情報など
DEBUG 開発時のデバック。本番時には出さない
INFO 送信受信時間、送受信データなど、正常系でログに残しておきたい情報。
WARN 業務エラーの記録。
ERROR システム運用の継続が困難な事象の記録。例外発生時のログ。

logback.xmlでは、ログの出力先や、どのレベルのログを出力するか、ログのフォーマットなどを設定することができる。

<!DOCTYPE logback>
<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern><![CDATA[
                %date{yyyy-MM-dd HH:mm:ss.SSS} %-5level %marker %logger{36}.%method <%X{sessionId}> <%thread> <%X{threadId}> <%X{monitorFlag}> <%X{resourceName}> <%X{code}> <%X{uid}> <%X{mail}> --- %msg%n
            ]]></pattern>
        </encoder>
    </appender>

    <appender name="APPLICATION_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>log/projectName-application.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>log/projectName-application-%d{yyyyMMddHH}.log</fileNamePattern> 
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder>
            <charset>UTF-8</charset>
            <pattern><![CDATA[
                %date{yyyy-MM-dd HH:mm:ss.SSS} %-5level %marker %logger{36}.%method <%X{sessionId}> <%thread> <%X{threadId}> <%X{monitorFlag}> <%X{resourceName}> <%X{code}> <%X{uid}> <%X{mail}> --- %msg%n
            ]]></pattern>
        </encoder>
    </appender>

     <logger name="com.example.sample">
        <level value="debug" />
    </logger>

    <logger name="org.springframework">
        <level value="info" />
    </logger>

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

ログの出力例は以下の通り。

2021-10-06 23:14:12.625 INFO   j.c.s.t.w.s.CalculationServiceImpl.sum <FD2D67A88DC0AAB5C7C7047F68607175> <http-nio-8080-exec-4> <217> <false> <sample> <TE> <sample> <sample.test@co.jp> --- 計算結果 ----->[-6] + [3] = [-3]