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

Spring Boot同时配置Logback与Log4j2后Syslog无法正常工作求助

Spring Boot同时配置Logback与Log4j2的问题解决

需求背景

最初仅使用Logback配置Syslog Appender,但Logback不支持RFC5424格式,而Log4j2支持该标准,因此希望同时配置两者,保留Logback的滚动日志功能,用Log4j2处理符合RFC5424的Syslog输出。

当前配置

Logback配置(logback.xml)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="DEV_HOME" value="/data/storage/log"></property>
<appender name="Console"
    class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>
            %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable
        </Pattern>
    </layout>
</appender>

<appender name="RollingFile"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>/data/storage/log/cms.log</file>
    <encoder
        class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
    </encoder>

    <rollingPolicy
        class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <!-- roll over daily and when the file reaches 10 MB, max of 7 days or 3GB threshold -->
        <fileNamePattern>/data/storage/log/cms.%d{yyyy-MM-dd}.%i.Logs.gz
        </fileNamePattern>
        <maxFileSize>100MB</maxFileSize>
        <maxHistory>7</maxHistory>
        <totalSizeCap>3GB</totalSizeCap>
    </rollingPolicy>
</appender>
<appender name="SPECIFIC_CLASS" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${DEV_HOME}/sizeTimeOutputlogFile.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>[%d{yyyy-MM-dd HH:mm:ss}] %p %c{1.} [%t]- %m%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${DEV_HOME}/archived/sizeTimeOutputlogFile.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <!--Max Size of file to start Archive -->
            <maxFileSize>10KB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>

        <!-- Days till log history to keep -->
        <maxHistory>3</maxHistory>
    </rollingPolicy>
</appender>
<!--syslog appender-->
<appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
    <syslogHost>127.0.0.1</syslogHost>
    <facility>LOCAL0</facility>
    <port>514</port>
    <throwableExcluded>true</throwableExcluded>
    <suffixPattern>%thread: %-5level %logger{36} - %msg%n</suffixPattern>
</appender>

<!-- LOG everything at ERROR level -->
<root level="ERROR">
    <appender-ref ref="RollingFile" />
    <appender-ref ref="Console" />
</root>

<!-- LOG "com.myapp*" at ERROR level -->
<logger name="com.myapp" level="ERROR" additivity="false">
    <appender-ref ref="RollingFile" />
    <appender-ref ref="Console" />
</logger>
<logger name="sysLogger" level="DEBUG" additivity="false">
    <appender-ref ref="SYSLOG" />
</logger>
</configuration>

Log4j2配置(log4j2.xml)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<Configuration strict="true" name="XMLConfig">
<Appenders>
    <Syslog name="Syslog" format="RFC5424" host="localhost" port="514"
            protocol="UDP" appName="cms" facility="LOCAL0" />
</Appenders>

<Loggers>
    <Logger name="com.mavenir.cms.vnf.util.ActivityLogAspect" level ="debug" additivity="false">
        <AppenderRef ref="Syslog"/>
    </Logger>
</Loggers>
</Configuration>

问题描述

  1. 应用运行后,Syslog无法正常输出日志
  2. 无法完全从Logback切换到Log4j2,因为找不到Log4j2中等效于Logback的滚动文件追加器配置

解决方案

一、直接切换到Log4j2(推荐)

Log4j2完全支持Logback的滚动日志功能,无需同时维护两个日志框架,避免依赖冲突和资源浪费。

1. 调整Maven依赖

排除Spring Boot默认的Logback依赖,引入Log4j2 starter:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

2. 配置Log4j2等效滚动追加器

修改log4j2.xml,添加对应Logback的两个滚动文件追加器:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration strict="true" name="XMLConfig" status="WARN">
    <Properties>
        <Property name="DEV_HOME">/data/storage/log</Property>
    </Properties>

    <Appenders>
        <!-- Console Appender -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%black{%d{ISO8601}} %highlight{%-5level} [%blue{%t}] %yellow{%C{1.}}: %msg%n%throwable"/>
        </Console>

        <!-- 对应Logback的RollingFile追加器 -->
        <RollingFile name="RollingFile" fileName="${DEV_HOME}/cms.log" filePattern="${DEV_HOME}/cms.%d{yyyy-MM-dd}.%i.Logs.gz">
            <PatternLayout pattern="%d %p %C{1.} [%t] %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="100MB"/>
            </Policies>
            <DefaultRolloverStrategy max="7">
                <Delete basePath="${DEV_HOME}" maxDepth="1">
                    <IfFileName glob="cms.*.Logs.gz"/>
                    <IfLastModified age="7d"/>
                    <IfAccumulatedFileSize exceeds="3GB"/>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>

        <!-- 对应Logback的SPECIFIC_CLASS追加器 -->
        <RollingFile name="SPECIFIC_CLASS" fileName="${DEV_HOME}/sizeTimeOutputlogFile.log" filePattern="${DEV_HOME}/archived/sizeTimeOutputlogFile.%d{yyyy-MM-dd}.%i.log">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] %p %c{1.} [%t]- %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10KB"/>
            </Policies>
            <DefaultRolloverStrategy max="3">
                <Delete basePath="${DEV_HOME}/archived" maxDepth="1">
                    <IfFileName glob="sizeTimeOutputlogFile.*.log"/>
                    <IfLastModified age="3d"/>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>

        <!-- RFC5424格式Syslog追加器 -->
        <Syslog name="Syslog" format="RFC5424" host="127.0.0.1" port="514"
                protocol="UDP" appName="cms" facility="LOCAL0"
                messageId="cms" mdcId="mdc" includeMdc="true"
                enterpriseNumber="18060" newLine="true" exceptionPattern="%throwable{full}"/>
    </Appenders>

    <Loggers>
        <Root level="ERROR">
            <AppenderRef ref="RollingFile"/>
            <AppenderRef ref="Console"/>
        </Root>
        <Logger name="com.myapp" level="ERROR" additivity="false">
            <AppenderRef ref="RollingFile"/>
            <AppenderRef ref="Console"/>
        </Logger>
        <Logger name="com.mavenir.cms.vnf.util.ActivityLogAspect" level="DEBUG" additivity="false">
            <AppenderRef ref="Syslog"/>
        </Logger>
        <!-- 原Logback中的sysLogger对应配置 -->
        <Logger name="sysLogger" level="DEBUG" additivity="false">
            <AppenderRef ref="Syslog"/>
        </Logger>
    </Loggers>
</Configuration>

二、解决Syslog输出问题

如果坚持同时使用Logback和Log4j2,需先解决依赖冲突,再检查Syslog配置:

1. 处理依赖冲突

在pom.xml中同时引入Logback和Log4j2,并排除冲突依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 引入Log4j2依赖 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
</dependency>
<!-- 保留Logback -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
</dependency>

注意:这种方式会导致SLF4J绑定冲突,需通过org.slf4j:slf4j-api的桥接包处理,不推荐生产环境使用

2. 检查Syslog服务状态

  • 确认本地Syslog服务(如rsyslog)已启动并监听514端口
  • 检查防火墙规则,允许UDP 514端口的入站/出站流量
  • 查看Syslog服务日志(如/var/log/syslog),确认是否有接收日志的记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:15:40