Python从log4j解析配置标记以解析日志

时间:2018-02-04 17:11:35

标签: python parsing logging log4j

我想解析一个log4j 配置,以便知道如何解析给定的日志。

要求:python 2.6+,没有自定义c模块(除非绝对必要)。

例如:

%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p{length=5} [%t] %c:%L %message%n

%d{ISO8601} %-5p{length=5} ((%t) %c:%L) %message%n

作为参考,此处描述了图案布局:

Pattern Layouts for log4j

最初,我打算为每个日志模式自定义它,例如使用re:

log1 = re.compile(r'([\d-]{10}) ([\d:.]{12}) {1}([A-Z]{0,}) \[(catalina-exec-[0-9]{2})\]{0,} (.*)\n')

注意:我意识到这不是一个非常全面的使用re,也不是一个优化的正则表达式。它只是测试。

我最初开始使用parsimonious就像这样(非常早期阶段):

    from parsimonious.grammar import Grammar
    grammar = Grammar(
        r"""
        category = "%c"
        category_precise = category optional_open number optional_close
        timedate = '%d'
        timedate_absolute = timedate optional_open timedate_abstext optional_close
        timedate_iso = timedate optional_open timedate_isotext optional_close
        timedate_date = timedate optional_open timedate_date optional_close
        timedate_era = "G"
        timedate_year_two_digit = ~"y{2}"
        timedate_year_number = ~"(?:y{1}|y{3,}"            
        timedate_month = "MM"
        timedate_minute = "mm"
        """

实际上,我想知道我是否采取了错误的方式?看起来我似乎以错误的方式使用PEG解析器,事实上我看得越多,我想我就是。

我不需要完整的代码,只需要一个好的概念,一个开始,一个想法或一个开始阅读的好地方。

最后,我希望能够查看日志格式,并且缺少更好的单词"将log4j2模式转换为正则表达式"

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

我建议Plex 2.0。我发现从配置文件中编写可识别令牌(如ISO8601,%d,%t等)的代码很容易。然后,正如您将从文档中看到的那样,我希望您能够编写由Plex返回的正则表达式代码来解析日志文件本身。