アプリケーションのログファイルを解析するためのPythonスクリプトを作成しています。
ほとんどのログファイルは同様の形式に従います。
09:05:00.342344343 [DEBUG] [SOME_APPLICATION] [SOME_FUNCTION] Lorem ipsum dolor sic amet
通過するさまざまな種類のログラインを解析し、関連するフィールドをPython regexグループ(タイムスタンプ、ログレベル、元のアプリ/関数、およびペイロードのフィールド)に分解するためのさまざまな正規表現があります。
私はこれらの正規表現のそれぞれをdictに保存しました:
foobar_patterns = {
'pattern1': re.compile(r'blahblahblah'),
'pattern2': re.compile(r'blahblahblahblah'),
}
ただし、各パターンの間には明らかにかなりの重複があります。タイムスタンプ、ログレベルなどを抽出するための正規表現は共有されます。
この冗長性を取り除く方法はありますか?共通のテンプレートから何らかの方法で差分正規表現文字列を構築できますか?
拡張機能-ファイル内の行をループし、次に、指定された行ごとに、コンパイルされた各正規表現をループします。次に、それに基づいて、それぞれのケースを処理するさまざまな関数があります。たとえば、特定のタイプのメッセージを検出した場合、3行先を検索して他の行を見つけ、そこからフィールドを抽出する必要があります。
foobar_patterns dictにも関数を格納することを考えていました。そして、一致したときにそれを実行しました。
それは物事を行うためのPythonの方法ですか?
乾杯、ビクター