ターミナル出力を色づけするツールを作ってみた
はじめに
先日こちらの記事を見てとても便利そうだったので、いろいろ機能追加してツールにしてみました。
使い方
こんな感じでパイプでつないで使います。
$ tail -f hoge.log | pipecolor
ファイル指定でcat
相当の動作をします。
$ pipecolor hoge.log
さらにLinux限定ですがPID指定で実行中のプロセスから出力を取ってくることもできます。
$ pipecolor -p 10000
また、出力が端末かファイルかは判定しているので、デフォルトではファイルへのリダイレクト時には色付けしません。
$ tail -f hoge.log | pipecolor > no_color.log # no_color.logは色付けなし
$ tail -f hoge.log | pipecolor --mode always > color.log # color.logは色付けあり
動作デモはこんな感じです。
(INFO行を緑、ERROR行を赤に色付けしてみました)
インストール
Releaseから最新のバイナリをダウンロードしてパスの通ったところに置いてください。
Rustで書かれているので環境構築済みの方は以下でもOKです。
$ cargo install pipecolor
設定
カラーリングの設定ファイルを用意します。デフォルトでは~/.pipecolor.toml
を読みます。
また、--config
オプションでパス指定も可能です。
シンプルな設定
[[lines]]
pat = "ERROR.*"
colors = ["Red"]
tokens = []
pat
にマッチさせる正規表現を、colors
に色を指定します。
この場合正規表現にマッチした部分全体がRed
になります。
グルーピングによる色分け
[[lines]]
pat = "(ERROR).*"
colors = ["Red", "LightRed"]
tokens = []
正規表現ではグルーピング指定ができて、各グループの色はcolors
の2つ目以降に書きます。
(1つ目の色はどのグループでもない部分です)
この場合はERROR
がLightRed
で.*
の部分がRed
です。
複数の色付け設定
[[lines]]
pat = "(ERROR).*"
colors = ["Red", "LightRed"]
tokens = []
[[lines]]
pat = "(INFO).*"
colors = ["Green", "LightGreen"]
tokens = []
lines
は複数設定出来ます。この設定は上の動作デモで使った「ERROR
が赤、INFO
が緑」のものです。
特定文字列のハイライト
マッチした行のうちさらに特定の文字列だけハイライトすることもできます。
[[lines]]
pat = "^(.*?) .*? .*? \\[(.*?)\\] \".*?\" .*? .*? \".*?\" \"(.*?)\""
colors = ["White", "LightGreen", "LightBlue", "Green"]
[[lines.tokens]]
pat = "GET"
colors = ["LightCyan"]
[[lines.tokens]]
pat = "POST"
colors = ["LightYellow"]
[[lines.tokens]]
pat = "HEAD"
colors = ["LightMagenta"]
これはApacheのログを想定した設定です。GET
/POST
/HEAD
に対してそれぞれ色付けしています。
色指定
使える色は今のところ以下です。
Usable color | ||||
---|---|---|---|---|
Black | Blue | Cyan | Default | Green |
LightBlack | LightBlue | LightCyan | LightGreen | LightMagenta |
LightRed | LightWhite | LightYellow | Magenta | Red |
White | Yellow |
Author And Source
この問題について(ターミナル出力を色づけするツールを作ってみた), 我々は、より多くの情報をここで見つけました https://qiita.com/dalance/items/b5cab68177f539239058著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .