仕事で、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にログが表示される。