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