You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助: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>
第三步:测试验证
  1. 启动Spring Boot应用,确认C:\logs\spring-boot-app.log生成并写入JSON格式日志
  2. 启动Windows服务中的NXLog(或手动运行nxlog.exe)
  3. 用浏览器/Postman访问http://你的NXLog服务器IP:8081/logs,就能看到JSON格式的日志列表了

内容的提问来源于stack exchange,提问作者Dhakshina Moorthy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:55:28