2011年12月18日日曜日

「標準出力に色をつけたい!」と思ったときは、このコマンド使ったらいいと思う。

「標準出力の色を変更するためのコマンド」を作った。

これを使えば、tailしているログに任意に色をつける事はもちろん、
pingなど標準出力されるもの全部に色をつける事ができる。
複雑な着色ルールでも、yaml形式の設定ファイルで簡単に設定できる。
結構うまくできた気がする。

経緯

この前、標準出力に色をつける方法を知った。
そのログ、色つきでtailしたくないですか?

ふと探してみると、色つきtailがあった。
pctail - CCZE に似た、Python で書かれた色つき Tail
やってる事は同じ。何を使って置換するかが違うだけかな。

チョット読んでみたが・・・、色のつけ方いまいち。
せめて、IPアドレスは色変えてほしい。

そしてログだけではもったいない。
いろんなコマンドの標準出力に色をつけたい。

しかし、前みたいにperlをパイプラインでつなぎまくるのはいけてない。(って言われたw)遅くなるし。
そこで、標準出力の色を変更するためのコマンドを作った。


ソース


結構長くなったので、githubに置く。
kokukuma / python-colorize

初めてpython書いたので、
めんどくさい書き方してる場合があるかも知れない。
誰か治してくれないかな・・・。

あ、pyyaml、インストールしておいてください。
PyYAMLモジュールを使ってPythonからYAMLを読む


使い方

$ colorize -a (色) (対象文字列)
$ colorize -r (カラールール名) (対象文字列)
1つ目の書き方では、対象文字列すべてが色変更の対象となる。
2つ目の書き方では、対象文字列を指定したカラールールに則って色変更を行う。
カラールールの形式はyml。
ルール名の下に、マッチさせる正規表現と色を指定する。
正規表現はダブルコーテーションで囲む。

(カラールール名):
    (ルール名):
        regular:"(対象文字列をあらわす正規表現)"
        color:(色)
    (ルール名):
        regular:"(対象文字列をあらわす正規表現)"
        color:(色)


使用例

tailしているログに色をつけたい場合はこんな感じ。
$ tail -f log |  colorize -a errorlog

pingに色をつけたい場合はこんな感じ。
$ ping google.com | colorize -a ping

このとき使っているconfig.ymlはこんな感じ。
errorlog:
    rule1:
        regular:"\[[Ee]rror\]"
        color:red
    rule2:
        regular:"\[emerg\]"
        color:green
ping:
    rule1:
        regular:"[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*"
        color:yellow
    rule2:
        regular:"[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*"
        color:under
    rule3:
        regular:"from"
        color:red

その後、
前後にgrepつけれない問題はまだ残っている。。
結構致命傷だな。

0 件のコメント:

コメントを投稿