lnav 自定义格式 解析nlog 日志 简明教程

引言

最开始,为了解决日志查看的问题;我找到了专业的日志中心:Seq

seq

它支持结构化日志的过滤筛选,有查询语法;支持类SQL查询数据;有了它很多很麻烦的问题一眼就找到bug所在;真是生产力工具 ,我在我NAS中部署它接入了接手的所有项目

但在公司的正式环境中因为网络以及其它的因素却不能使用;这带来了很大的不便;后来我发现了有一个轻量型的命令行工具lnav

这可以一定程度上替代部分SEQ的功能;本文介绍 lnav应用在c# nlog日志的教程

解决方案

lnav解析日志文件依赖于正则表达式及相关配置,但是网上却没有lnav分析nlog日志的教程;本文权当抛砖引玉

nlog的配置在nlog.config

日志格式定义于target.layout

我的日志格式是这样:

${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|${message}|${exception:format=toString}

在创建自己的format时请留意区别

lnav我安装的windwos版它的自定义格式目录在:%APPDATA%\lnav\formats\installed,首次运行时会自行创建;在%APPDATA%\lnav\formats\default中有官方的解析其它日志格式的示例,请自行参考

假如不确定你的目录,请输入lnav.exe -h查看

这里我先给出我的nlog.json配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
{
"$schema": "https://lnav.org/schemas/format-v1.schema.json",
"nlog_log" : {
"title" : "c# nlog Log Format",
"description" : "Log format used Nlog with c#",
"url" : "http://example.com/log-format.html",
"regex" : {
"basic" : {
"pattern" : "(?<timestamp>[^|]+)\\|(?<eventid>[^|]*)\\|(?<logger>[^|]+)\\|(?<level>[^|]+)\\|(?<message>[^|]*)\\|(?<exception>.*)"
}
},
"timestamp-format": [
"%Y-%m-%d %H:%M:%S"
],
"level-field" : "level",
"level" : {
"error" : "ERROR",
"info" : "INFO",
"warning" : "WARN"
},
"value" : {
"logger": {
"kind": "string",
"identifier": true
}
},
"sample" : [
{
"line" : "2023-11-02 10:49:34.9658||XXXX.Cache.FactoryCache|ERROR|机构枚举类型加载失败。|System.Net.Http.HttpRequestException: 由于目标计算机积极拒绝,无法连接。 (127.0.0.1:YYYY) ---> "
}
]
}
}

配置解读

  • timestamp-format

官方文档:formats有对时间格式的详细解释,%Y-%m-%d %H:%M:%S可以解析年月日时分秒

  • value

value中的"identifier":ture表示设置这个匹配字段(logger)为关键字,这样就会高亮显示了

假如你的配置有误,执行lnav.exe xxxx.log命令时会提示,参照修改即可

简明教程

执行lnav.exe xxxx.log yyy.log打开日志文件后页面如图

lnav_nlog_sample

  • e 跳转到下个错误
  • F2启动鼠标操作;
  • 左上角可选时间过滤
  • 双击日志内容会弹出Actions
    • Filter-in表示只显示与选中的内容相同的行
    • Filter-out表示排除选中内容相同的文本的行
    • Search搜索当前内容

参考资料


lnav 自定义格式 解析nlog 日志 简明教程
http://blog.wangshuai.app/2025-12-08-lnav-nlog-sample/
作者
王帅
发布于
2025年12月8日
许可协议