@kyanny's blog

My thoughts, my life. Views/opinions are my own.

logfmt 形式のログのキーを一覧する

grep -Po '\S+(?==)'

要 GNU grep。(?==) は肯定先読み(lookahead)。= を結果から除外するため。

$ cat log.txt
2010-09-16T15:13:46.723498+00:00 heroku[router]: at=info method=GET path="/posts" host=myapp.herokuapp.com" fwd="204.204.204.204" dyno=web.1 connect=1ms service=18ms status=200 bytes=975

$ cat log.txt | grep -Po '\S+(?==)'
at
method
path
host
fwd
dyno
connect
service
status
bytes

もっと key value ペアが大量にあって一行が長いログの場合に、そのままだと見づらくてどんなキーがあるか把握するのが大変。キーの一覧だけパッと見ると当たりをつけやすい。