zakki-cho

インプットしたらアウトプットする。アウトプットすることを考えてインプットする。

tailプラグインのformatを書く上で最低限知っておきたいこと

tailプラグインを使う場合に、apacheやsyslogといった既存のフォーマットを使うのではなく、自分でカスタムしたフォーマットを使う際には、最低限知っておきたいと思ったのは以下の2点です。

  • エスケープ処理
  • 後方参照を伴わないグループ化

エスケープ処理

参考にさせていただいたページはこちらです。

パターンの中のエスケープ処理
http://www.rubylife.jp/regexp/ini/index5.html

以下の記号を使う場合には、エスケープ処理が必要となります。

\ * + . ? { } ( ) [ ] ^ $ - | /

fluentdの公式ページのドキュメントにあるapacheのフォーマットはこちらになります。
ところどころでエスケープ処理をしているのが分かります。

format /^(?[^ ]*) [^ ]* (?[^ ]*) \[(?

「"」(ダブルクォーテーション)は、上記のエスケープ処理が必要となる記号の中に含まれていませんが、 [^\"] のように書いても問題ないようです。
エディタによっては、"に囲まれた部分の色を変えてくれたりするので、こうしておくと見やすくなります。

"(?[^\"]*)"

後方参照を伴わないグループ化

自分は正規表現について詳しくなく、これを知らなかったのでかなり混乱しました。

(?: 〜 )

参考にさせていただいたページはこちらです。

正規表現
http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fregexp.html

後方参照を伴わないグループ化の説明は上記のページにある通りですが、要はただ括っているだけです。それだけです。


この エスケープ処理 と 後方参照を伴わないグループ化 の2つがわかると、公式ページにあるapacheとsyslogのフォーマットがわかるようになるかも?