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

Linux服务器部署的Spring Boot JMS应用日志留存方案咨询

Spring Boot JMS应用日志持久化与故障追踪方案

一、日志持久化配置(基于Spring Boot默认Logback)

Spring Boot默认集成Logback,直接通过配置文件即可实现日志落地到文件,同时保留控制台输出。

  1. 在项目src/main/resources目录下创建/修改logback-spring.xml,配置滚动日志(按天分割、自动归档):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 文件滚动输出 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 日志文件路径,需确保应用有写入权限 -->
        <file>/var/log/jms-middleware/app.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 按天分割归档,压缩为gz -->
            <fileNamePattern>/var/log/jms-middleware/app.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
            <!-- 保留30天历史日志 -->
            <maxHistory>30</maxHistory>
            <!-- 总日志大小上限10GB -->
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 根日志级别设为INFO,绑定输出源 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>

    <!-- 针对JMS业务包单独调整日志级别(可选) -->
    <logger name="com.yourpackage.jms" level="DEBUG" additivity="false">
        <appender-ref ref="FILE"/>
        <appender-ref ref="CONSOLE"/>
    </logger>
</configuration>
  1. 服务器端准备日志目录:
mkdir -p /var/log/jms-middleware && chown your-app-user:your-app-user /var/log/jms-middleware

替换your-app-user为运行应用的系统用户。

二、关键故障场景的日志增强

针对需要追踪的故障,必须在日志中嵌入账户号等核心标识,方便快速定位:

1. SOURCE系统连接失败

在JMS消费者的连接异常捕获块中,记录连接参数与异常栈:

try {
    // 初始化SOURCE系统JMS连接逻辑
    jmsConnectionFactory.createConnection();
} catch (JMSException e) {
    LOGGER.error("SOURCE系统JMS连接失败,连接地址: {}", sourceBrokerUrl, e);
}

2. DESTINATION系统发送失败

发送前记录目标地址与账户号,失败时追加异常栈:

try {
    jmsTemplate.send(destinationQueue, session -> {
        Message message = session.createTextMessage(transformedXml);
        message.setStringProperty("accountNo", accountNo);
        return message;
    });
    LOGGER.info("消息发送至DESTINATION成功,账户号: {}", accountNo);
} catch (JmsException e) {
    LOGGER.error("DESTINATION系统消息发送失败,账户号: {},目标队列: {}", accountNo, destinationQueueName, e);
}

3. XML转换失败

转换前提取账户号(即使转换失败也要尽量从原始XML中解析),日志中加入XML片段(注意脱敏敏感信息):

try {
    AccountInfo account = xmlTransformer.transform(xmlContent);
    LOGGER.info("XML转换成功,账户号: {}", account.getAccountNo());
} catch (XmlTransformationException e) {
    String accountNo = extractAccountNoFromRawXml(xmlContent);
    // 只记录XML前200字符避免日志过大
    LOGGER.error("XML转换失败,账户号: {},XML片段: {}", accountNo, xmlContent.substring(0, 200), e);
}

注意:必须传入异常对象e,才能打印完整栈轨迹,便于排查根因。

三、Linux服务器日志管理

  1. 启动应用:推荐用systemd管理服务(替代nohup),实现自动重启与统一日志管理:
    创建/etc/systemd/system/jms-middleware.service:
[Unit]
Description=JMS Middleware Service
After=network.target

[Service]
User=your-app-user
Group=your-app-group
WorkingDirectory=/opt/jms-middleware
ExecStart=/usr/bin/java -jar your-app.jar
Restart=always
RestartSec=5
StandardOutput=journal+console
StandardError=journal+console

[Install]
WantedBy=multi-user.target

执行命令启用服务:

systemctl daemon-reload && systemctl start jms-middleware && systemctl enable jms-middleware
  1. 查看日志:
  • 实时查看:journalctl -u jms-middleware -f
  • 搜索特定账户日志:grep "账户号: 123456" /var/log/jms-middleware/app*.log
  • 查看历史归档日志:zcat /var/log/jms-middleware/app.2024-05-20.log.gz

四、Jenkins部署补充配置

  1. 在Jenkins构建任务中,添加远程执行步骤:复制Jar包后自动创建日志目录并设置权限:
ssh your-server "mkdir -p /var/log/jms-middleware && chown your-app-user:your-app-user /var/log/jms-middleware"
  1. 可选:在Jenkins中配置构建后步骤,同步服务器日志到Jenkins工作区,方便后续回溯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:45:24