Logbackのログを見やすくする方法(ファイルをgrep, Lilith)

    仕事で、Javaのロギングツールとして slf4j + logbackを使っている。

    このログなのだが、IntelliJの出力画面から見ると、みにくい。

    できれば、一連のログをgrepしたいのだが、それがIntellJではできないのだ。

    そこで、出力されたログをフィルタする方法を調べたところ、2つ方法が見つかった。

    ファイルに書き出してgrepする {#-grep-}

    まずは、簡単な方法から。ログをファイル出力して出力結果をキーワードでfilterする。

    filterの方法は、さくらエディタだったり、秀丸エディタだったりの機能を使えば良い。

    では、ファイルにログを出力する方法だけれども、以下をlogback.xmlに追加。

    <?xml version="1.0" encoding="UTF-8" ?>
    <configuration>
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>logs/app.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>logs/app.%d{yyyy-MM-dd}.log.tar.gz</fileNamePattern>
                <maxHistory>7</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <root level="INFO">
            <appender-ref ref="FILE"/>
        </root>
    </configuration>

    これで logs/app.logにログが出力される。

    ログイベントビューアの Lilithをつかう {#-lilith-}

    Lilithは OSSのlogback用ログビューア。

    Lilithのために、以下のツールをインストールする。build.gradeのdependenciesに以下を追加。

    <?xml version="1.0" encoding="UTF-8" ?>
    <configuration>
        <appender name="LogbackClassic" class="ch.qos.logback.classic.net.SocketAppender">
            <RemoteHost>localhost</RemoteHost>
            <Port>4560</Port>
            <ReconnectionDelay>170</ReconnectionDelay>
            <IncludeCallerData>true</IncludeCallerData>
        </appender>
    
        <appender name="FILE2" class="ch.qos.logback.core.FileAppender">
            <file>logs/classic.lilith</file>
            <encoder class="de.huxhorn.lilith.logback.encoder.ClassicLilithEncoder">
                <IncludeCallerData>true</IncludeCallerData>
            </encoder>
        </appender>
    
        <root level="INFO">
            <appender-ref ref="LogbackClassic"/>
            <appender-ref ref="FILE2"/>
        </root>
    </configuration>

    Lilithを立ち上げておいて、アプリを実行すると、Lilithにログが表示される。