old « コロコロを綺麗に切る方法 | メイン | 山下公園のすずめと野毛山動物園のレッサーパンダ » new

URLエンコードされたnginxのアクセスログをrubyでデコードして表示する

2017年05月13日

nginxのアクセスログにマルチバイト文字を含んでいると、URLエンコードされた状態で出力される。

200 GET charm.wizeweb.net /search/%E3%82%AD%E3%83%A5%E3%83%BC%E3%83%90%E3%83%91%E3%83%BC%E3%83%AB%E3%82%B0%E3%83%A9%E3%82%B9

これだと見にくいよね。

そこで、rubyのワンライナーでURLデコードして表示する方法を見つけた。

sudo tail -f -n 500 /var/log/nginx/access.log | ruby -r uri -ne 'print URI.unescape $_'

このコマンドで出力すると、以下のようになる。

200 GET charm.wizeweb.net /search/キューバパールグラス

おお、これは見やすい。

で、何をしているかというと…。

| ruby -r uri -ne 'print URI.unescape $_'
|        :tailの結果を次のコマンドに繋ぐ
ruby     :rubyコマンドを実行
-r 'uri' :require 'uri'と同じ
-n       :引数で指定された文字列を繰り返し処理する
-e 'print URI.unescape $_'
         :引数から読み込んだ文字列($_)をURIアンエスケープして出力する

こういうことかな?

参考:
 ・URLデコードをワンライナー(one liner)で
 ・Ruby 2.4.0 リファレンスマニュアル > Rubyの起動 コマンドラインオプション

このエントリーをはてなブックマークに追加

old « コロコロを綺麗に切る方法 | メイン | 山下公園のすずめと野毛山動物園のレッサーパンダ » new

トラックバックURL

このエントリーのトラックバックURL:
http://blog.hp-improve.com/mt/mt-tb.cgi/1572

コメントする