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>