我正在努力添加 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 中启用调试。这应该可以让您了解正在查找和加载哪些配置文件。