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

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

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

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

ファイルに書き出して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は 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にログが表示される。