0
1

Logging、ロギング

Posted at

Logging、ロギング

  • オペレーティングシステムでは、System.out.println()のようなシステムコンソールを使用せず、別途のロギングライブラリを使用してログを出力する。
  • ログを使えばThreadの情報、クラス名のような付加情報を一緒に見ることができ、出力の形を調整することができる。
  • ログレベルを開発サーバーはdebug、ローカルではtrace、運営サーバーはinfoに設定できる。
  • コンソールだけに出力するのではなく、ファイルやネットワークなど、ログを別の位置に残すことができる。 特にファイルとして残すときは、日替わり、特定の容量に応じてログを分割することも可能である。
    private Logger log = LoggerFactory.getLogger(getClass());
    private static final Logger log = LoggerFactory.getLogger(Xxx.class)
    
    又はlombok annotation@Slf4jを使用 
    
    @Slf4j
    @RestController
    public class LogTestController {
        // private final Logger log = LoggerFactory.getLogger(getClass());
        //private final Logger log = LoggerFactory.getLogger(LogTestController.class);
    
        @RequestMapping("/log-test")
        public String logTest() {
            String name = "Spring";
    
            log.trace(" trace log={}", name);
            log.debug(" debug log={}", name);
            log.info(" info log={}", name);
            log.warn(" warn log={}", name);
            log.error(" error log={}", name);
    
            return "ok";
        }
    
    }
    
    2023-09-30 19:33:11.233  INFO 9964 --- [nio-8080-exec-1] hello.springmvc.basic.LogTestController  :  info log=Spring
    2023-09-30 19:33:11.234  WARN 9964 --- [nio-8080-exec-1] hello.springmvc.basic.LogTestController  :  warn log=Spring
    2023-09-30 19:33:11.234 ERROR 9964 --- [nio-8080-exec-1] hello.springmvc.basic.LogTestController  :  error log=Spring
    
  • traceとdebugのログも見たい場合は、application.propertiesに以下の内容を作成する。
    # trace, debugのログを見たい場合
    logging.level.hello.springmvc = trace
    
    # traceを除いてdebugレベルから見たい場合
    logging.level.hello.springmvc = debug
    
    # 何も書いてない基本はinfo
    

ファイルへのログ出力

  • application.propertiesにlog関連設定をするxmlファイルを作成する。
    application.properties
    logging.config=classpath:logback.xml
    
  • xmlファイルを作成し、以下の内容を記載する。
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 60秒ごとに設定ファイルの変更を確認して変更時更新-->
    <configuration scan="true" scanPeriod="60 seconds">
        <!--現在の日付-->
        <timestamp key="BY_DATE" datePattern="yyyyMMdd"/>
        <!--ログファイルが保存されるパス-->
        <property name="LOG_PATH" value="/temp/log"/>
        <!--ログファイル名-->
        <property name="LOG_FILE_NAME" value="LOG"/>
        <!-- ログ出力パターン-->
        <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] [%logger{40}] - %msg%n"/>
        <!--ログレベル-->
        <!--
            1) ERROR : エラーメッセージ表示
            2) WARN:警告メッセージ表示
            3) INFO : 情報性メッセージ表示
            4) DEBUG:デバッグするためのメッセージ表示
            5) TRACE:Debugよりはるかに詳細なメッセージ表示
            以下ではinfoに設定していますが、 この場合はINFOより上にあるDEBUGとTRACEは表示しない。
        -->
        <property name="LOG_LEVEL" value="info"/>
    
        <!-- CONSOLEにログ出力セッティング-->
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <Pattern>${LOG_PATTERN}</Pattern>
            </encoder>
        </appender>
    
        <!-- Fileにログ出力セット-->
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!--ファイルパス設定-->
            <file>${LOG_PATH}/${BY_DATE}/${LOG_FILE_NAME}。log</file>
            <!--出力パターン設定-->
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>${LOG_PATTERN}</pattern>
            </encoder>
            <!--Rolling政策-->
            <rollingPolicy class="ch.qos.logback.core.rolling。TimeBasedRollingPolicy">
                <!---.gz,.zipなどを入れると自動日付別ログファイル圧縮-->
                <fileNamePattern>${LOG_PATH}/%d{yyyy-MM, aux}/${LOG_FILE_NAME}。%d{yyyy-MM-dd}.log</fileNamePattern>
                <!--日付別ログファイル最大保管周期(~日)、該当設定日以上のファイルは自動的に削除-->
                <!-- <maxHistory>30</maxHistory> -->
                <!-- ログ ファイルの最大保管サイズ。 最大サイズを超えると最も古いログ自動削除 -->
                <totalSizeCap>20GB</totalSizeCap>
            </rollingPolicy>
        </appender>
    
        <!--ログ全域セッティング-->
        <root level="${LOG_LEVEL}">
        <!--上に設定したコンソール設定追加-->
        <appender-ref ref="CONSOLE"/>
        <!--上に設定したファイル設定追加-->
        <appender-ref ref="FILE"/>
        </root>
    </configuration>
    
0
1
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
0
1