lnav 无法识别我们的日志。自定义格式似乎无法应用。

lnav 无法识别我们的日志。自定义格式似乎无法应用。

我正在努力添加 lnav 格式来解析我公司的 java 应用程序的日志。我很难让 lnav 识别它们。到目前为止,我的 json 格式文件如下所示:

{
    "company_serverlog" : {
        "title" : "Company Server Log",
        "description" : "Log format used by the application.",
        "url" : "http://www.google.com",
        "regex" : {
            "std" : {
                "pattern" : "^(?<timestamp>\\d\\d\\d\\d-\\d\\d-\\d\\d \\d\\d:\\d\\d:\\d\\d,\\d\\d\\d)\\|(?<level>DEBUG|ERROR|WARN|HEADER)\\|(?<orig>.+:)\\|(?<method>.+\\|)(?<body>.+)$"
            }
        },
        "level-field" : "level",
        "level" : {
            "error" : "ERROR",
            "warning" : "WARN"
        },
        "value" : {
            "orig" : {
                "kind" : "string",
                "identifier" : true
            },
            "method" : {
                "kind" : "string",
                "identifier" : true
            },
            "body" : {
                "kind" : "string",
                "identifier" : true
            }
        },
        "sample" : [
            {
                "line" : "2016-05-25 16:07:12,367|DEBUG|source of log msg:|com.company.package.file| Log message body here"
            }
        ]
    }
}

lnav 仍在将我们的日志文件作为通用日志文件。如有任何帮助和/或建议,我们将不胜感激。

答案1

问题出在我的正则表达式上。我需要解决日志中源捕获组没有用于 ERROR 或 WARN 日志级别的 : 字符的情况。在为 : 字符添加量词 ? 后,我能够让 lnav 拾取我们公司的日志文件并应用此自定义格式。

这个疏忽凸显了编写正则表达式时需要非常小心。

答案2

听起来 lnav 找不到配置文件。您是否将格式文件放在 ~/.lnav/formats 目录的子目录中?例如:

~/.lnav/formats/company_serverlog/format.json

您可以使用“-d <file>”选项在 lnav 中启用调试。这应该可以让您了解正在查找和加载哪些配置文件。

相关内容