IntelliJのIdeologによるログファイルのハイライト

Intellij IDEAにはデフォルトでログファイルをハイライトするIdeologというプラグインが入っています。こいつを使おうとしてもいまいち上手くいかなかったので、調査結果の簡単なまとめ。

基本的なコンセプトとしては、

* ログのフォーマットを指定
* ハイライトするパターンを指定

を設定することにより、ログを解析する。


## 設定

`Editor -> Log Highlighting (Ideolog)`

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/231669/eaad0fdf-2cf2-7195-85df-7a93a4cb7a1e.png)

* `Log formats`を変更しても、ファイルを開きなおすか編集するまで表示が更新されない場合がある。こんなくだらないことでハマったので注意。`Patterns`は反映される模様。
* ログファイルとして認識されるのは、IntelliJのに`Log`として登録されているタイプ。デフォルトでは`*.log`のみ。`Editor -> File Types`から設定可能。


### ログフォーマット

#### Enabled
そのフォーマットが有効かどうか。

#### Name
任意の名前

#### Message pattern
ログとして認識する正規表現。

#### Message start pattern
ログの開始を表す正規表現。パフォーマンス上の理由から使われる。

#### Time format
時刻のパターン。`yyyy-MM-dd`など。

#### Time capture group
Message patternにおける、時刻の正規表現グループのインデックス。もし時刻を持たない場合、0を指定する。

#### Severity capture group
Message patternにおける、深刻さを表す正規表現グループのインデックス。一般的にはログレベル(`INFO`、`WARN`)を指定? もし項目を持たない場合、0を指定。

#### Category capture group

Message patternにおける、ログのカテゴリーを表す正規表現グループのインデックス。もし項目を持たない場合、0を指定。ログファイルとソースコードのマッピングに使われるらしいが、『カテゴリー』ってなんだろう……。


### パターン

#### Pattern
ハイライトを行う正規表現を指定する。この正規表現は大文字小文字を無視する(iフラグが指定された状態?)。この正規表現は`Message pattern`の各グループに対して評価される模様。もしログに設定されているいずれの`Message pattern`もマッチしなかった場合、デフォルトで行全体がマッチしたものとみなされる。そのためハイライトのパターンを適当に指定すると想定外の個所がハイライトされるので注意。

#### アクション
* `Highlight line` - 行全体をハイライトする。
* `Highlight field` - マッチしたグループをハイライトする。ここでいうグループは`Message pattern`におけるグループである模様。
* `Highlight match` - マッチした個所をハイライトする。[Wiki](https://github.com/JetBrains/ideolog/wiki/Highlighting-Patterns)には「**currently not working**」と記述あり。2012年と古い記述なので今ではどうかわからないが、実際試したところうまく動かなかった。

#### Show on stripe

スクロールバーの下に表示されるエラー行の表示に反映するかどうかの設定……のようなのだが、エラー以外では動作が確認できなかった。情報求む。

### フィルター

正規表現にマッチした個所を隠す……らしいのだが`^.*$`を設定しても何も変化が起きなかった。調べても情報が全然出てこない。情報求む。


## 使い方

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/231669/06a3b7ab-1232-bb66-77d5-84eb4de7fa7b.png)

デフォルトでパイプ区切りパターンが設定されているので、適当なログファイルをでっちあげてみたところ。パターンは手動で設定している(デフォルトで`WARN`がマッチしない!)。

パターンで設定した個所がハイライトされ、スクロールバーの下にエラー行が表示されているのが確認できる。

[インテンション・アクション](https://www.jetbrains.com/help/idea/intention-actions.html)から様々な操作ができる。デフォルトのショートカットは`alt + enter`。

#### Toggle time hilighting
時刻の表示をハイライトする。カーソルを時刻に合わせていないとメニューに表示されない。
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/231669/55705f6c-9a01-d406-9ef4-0be8892a5e6e.png)
わざわざパターンまで指定したのだからもっと賢い機能があるのかと思いきや、そんなことはなかった。情報求む。

#### Show only line containing '...'
カーソル下の単語を含まない行を隠す。ユーザー名などでログを抽出するのに使える。
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/231669/c476c6af-ec0b-c5cf-d9d6-68bae40c8e01.png)

#### Hide line containing '...'
カーソル下の単語を含む行を隠す。上記の逆。
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/231669/665fadf4-5e3d-4654-4b15-ec74b2cd2e1c.png)

#### Hilight '...'
カーソル下の単語を**含む行**をハイライトする。
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/231669/af5ae037-676c-7521-bd7b-93af848aa0db.png)

#### Hilight this column
カーソル下のカラムをハイライトする機能……に思えるが、なぜか全体がハイライトされた。意味が分からない。
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/231669/bac0b863-5787-31b8-54fb-91a0c835b671.png)

#### Jump to source
ソースコードに移動する。移動先は`Message pattern`の`severity`および`category`に基づいて推測されるらしい。どのように推測しているのかについては、ドキュメンテーションは発見できなかった。


## まとめ

* パターンによる色付けはなかなか実用的
* それ以外は微妙
* ドキュメンテーションは大事


## 参考文献

* [Wiki](https://github.com/JetBrains/ideolog/wiki)
* [Viewing, filtering and navigation for log files in Rider 2018.1 EAP](https://blog.jetbrains.com/dotnet/2018/03/28/viewing-filtering-navigation-log-files-rider-2018-1-eap/)