求助:Windows平台Spring Boot服务如何用NXLog记录JSON格式日志
刚接触NXLog的话不用慌,我帮你梳理一套从Spring Boot输出JSON日志,到NXLog收集,再让客户端能获取展示的完整流程,一步步来:
第一步:配置Spring Boot输出标准JSON格式日志
Spring Boot默认用Logback作为日志框架,我们可以借助logstash-logback-encoder来轻松输出JSON格式日志:
- 首先在
pom.xml中添加依赖(用最新稳定版即可):
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>7.4</version> </dependency>
- 接着创建或修改
src/main/resources/logback-spring.xml,配置同时输出JSON日志到控制台和文件:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 输出到控制台 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <timestamp> <pattern>yyyy-MM-dd'T'HH:mm:ss.SSSXXX</pattern> </timestamp> <loggerName/> <level/> <message/> <stackTrace/> </providers> </encoder> </appender> <!-- 输出到文件(供NXLog读取) --> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>C:\logs\spring-boot-app.log</file> <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <timestamp> <pattern>yyyy-MM-dd'T'HH:mm:ss.SSSXXX</pattern> </timestamp> <loggerName/> <level/> <message/> <stackTrace/> </providers> </encoder> </appender> <root level="INFO"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root> </configuration>
如果偏好YAML配置,也可以修改application.yml:
logging: pattern: console: "%json" encoder: console: class: net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder providers: timestamp: pattern: yyyy-MM-dd'T'HH:mm:ss.SSSXXX loggerName: {} level: {} message: {} stackTrace: {} file: name: C:\logs\spring-boot-app.log
第二步:配置NXLog收集并暴露日志接口
NXLog在Windows上的核心配置文件是C:\Program Files\nxlog\conf\nxlog.conf,我们需要配置输入模块读取Spring Boot的日志文件,输出模块把日志以HTTP接口形式暴露给客户端:
## 全局基础配置 define ROOT C:\Program Files\nxlog Moduledir %ROOT%\modules CacheDir %ROOT%\data Pidfile %ROOT%\data\nxlog.pid SpoolDir %ROOT%\data LogFile %ROOT%\data\nxlog.log ## 加载JSON解析模块 <Extension json> Module xm_json </Extension> ## 输入模块:监听Spring Boot的日志文件 <Input spring_boot_logs> Module im_file File "C:\logs\spring-boot-app.log" SavePos TRUE # 重启NXLog后从上次读取位置继续 ReadFromLast TRUE # 只读取新生成的日志,不回溯历史日志 Exec parse_json(); # 自动解析每行的JSON日志为NXLog字段 </Input> ## 输出模块:以HTTP接口形式暴露日志(方便客户端调用) <Output http_output> Module om_http URL http://0.0.0.0:8081/logs # 监听本地8081端口,接口路径为/logs ContentType application/json Exec to_json(); # 把处理后的日志重新序列化为JSON输出 </Output> ## 路由规则:连接输入和输出模块 <Route 1> Path spring_boot_logs => http_output </Route>
可选优化:过滤特定日志
如果只需要收集ERROR级别日志,可以在输入模块里添加过滤规则:
<Input spring_boot_logs> Module im_file File "C:\logs\spring-boot-app.log" SavePos TRUE ReadFromLast TRUE Exec parse_json(); if ($level != "ERROR") drop(); # 丢弃非ERROR级别的日志 </Input>
第三步:测试验证
- 启动Spring Boot应用,确认
C:\logs\spring-boot-app.log生成并写入JSON格式日志 - 启动Windows服务中的NXLog(或手动运行
nxlog.exe) - 用浏览器/Postman访问
http://你的NXLog服务器IP:8081/logs,就能看到JSON格式的日志列表了
内容的提问来源于stack exchange,提问作者Dhakshina Moorthy
相关产品推荐
相关产品推荐

