will and way

ただの自分用メモを人に伝える形式で書くことでわかりやすくまとめてるはずのブログ

Tomcat周りのログとslf4jのログの設定

Tomcatで出力されるログ

リストがここにあった。

そこで自分が開発してるアプリで使ってるのが
・catalina.out → Tomcatの起動・停止等のログが流れる。
localhost.[date] → JavaでのNullPointerExceptionやJSPのエラーなどがここに吐出される。
の2つ。

Tomcatのログローテーションの設定

ここを参考にした。

まとめると2つの方法があり
・logging.propertiesを編集
・OSのログローテーション機能を使うか

後者は

/etc/logrotate.d/tomcatという設定ファイルを作る

と書いてある。

アプリ内のロギング

Appenderの定義

Chapter 6: Layoutsの記載を踏襲する。

<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <append>true</append>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>DEBUG</level>
    </filter>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LoggingDir}/hoge.%d{yyyy-MM-dd}.gz</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%level] %logger %msg%n</pattern>
    </encoder>
</appender>

ERRORの場合
30は90日にしておいた。

loggerの設定
<logger name="org.springframework" level="INFO">
    <appender-ref ref="STDOUT"/>
</logger>

<!-- jp.co.hoge配下のログは実行環境に合わせる。 -->
<logger name="jp.co.hoge" level="${ROOT_LEVEL}">
    <appender-ref ref="STDOUT"/>
    <appender-ref ref="INFO"/>
</logger>

<!-- 全てのエラーはERRORに反映させる -->
<root level="${ROOT_LEVEL}">
    <appender-ref ref="ERROR"/>
</root>

*1

STDOUTはConsoleAppenderすなわちCatalina.outに出力される。

ここでポイント
・ spring関連のログはINFOにして、STDOUTを指定→Catalina.outで起動状況を追跡。*2
ERROR(WARN以上)はrootロガー
・ アプリログはINFO

*1:ROOT_LEVELのようなプレースホルダ昨日の記事で書いた。

*2:localでログレベルをdebugに指定した所、とんでもない量のログがでたので、springのログをくくりだしてINFOに指定してある。