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

Log4j2无法加载自定义ConsoleLogConverter与SocketLogResolverFactory插件

Log4j2自定义插件无法加载问题

我正尝试为Log4j2添加两个自定义插件ConsoleLogConverter和SocketLogResolverFactory,用于实现日志脱敏功能,但应用启动时Log4j2无法加载这些插件,尽管它们的位置和注解都配置正确。

环境信息

  • Log4j2版本:2.24
  • Java版本:17
  • 框架:Spring Boot 3.3.2
  • 构建工具:Maven

已尝试操作

  • 创建log4j2.plugins文件和log4j2.component.properties文件
  • 最初Log4j2Plugins.dat仅存在于target目录,之后添加Maven配置将其从target复制到resources目录,但转换器仍未注册

已完成的检查项

  1. 确认ConsoleLogConverter和SocketLogResolverFactory类所在包正确,且使用@Plugin注解
  2. 确保log4j2.xml配置文件在启动时加载
  3. 检查@Plugin和@PluginFactory注解来自正确的Log4j包
  4. 排查pom.xml中Log4j2与其他库的版本冲突

相关配置与代码

log4j2.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace" monitorInterval="10">
    <Properties>
        <Property name="encProvider"/>
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg_json%n"/>
            <Filters>
                <RegexFilter regex="(?i).*Authorization.*" onMatch="DENY" onMismatch="NEUTRAL"/>
                <RegexFilter regex="(?i).*getAccessToken.*" onMatch="DENY" onMismatch="NEUTRAL"/>
                <RegexFilter regex="(?i).*jwt.*" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
        </Console>
    </Appenders>

    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

Log4j2相关pom配置

<dependencies>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j2-impl</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-layout-template-json</artifactId>
        <version>${log4j.version}</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                    </exclude>
                </excludes>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>${mapstruct.version}</version>
                    </path>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>${lombok.version}</version>
                    </path>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok-mapstruct-binding</artifactId>
                        <version>${lombok.mapstruct.binding.version}</version>
                    </path>
                    <path>
                        <groupId>org.apache.logging.log4j</groupId>
                        <artifactId>log4j-core</artifactId>
                        <version>${log4j2.version}</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-maven-plugin</artifactId>
            <version>${liquibase.version}</version>
            <configuration>
                <propertyFile>
                    src/main/resources/liquibase/liquibase.properties
                </propertyFile>
                <changeLogFile>
                    src/main/resources/liquibase/db_changelog_master.yaml
                </changeLogFile>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.2.0</version>
            <executions>
                <execution>
                    <id>copy-log4j2-plugins</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${basedir}/src/main/resources/META-INF/org/apache/logging/log4j/core/config/plugins</outputDirectory>
                        <resources>
                            <resource>
                                <directory>${project.build.directory}/classes/META-INF/org/apache/logging/log4j/core/config/plugins</directory>
                                <includes>
                                    <include>Log4j2Plugins.dat</include>
                                </includes>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

ConsoleLogConverter代码

@SuppressWarnings("unused")
@Plugin(name = "ConsoleLogConverter", category = CATEGORY)
@ConverterKeys({"msg_json"})
public class ConsoleLogConverter extends LogEventPatternConverter implements LogEventAppender {

    public ConsoleLogConverter() {
        super("Message", "message");
        System.out.println("ConsoleLogConverter loaded!");
    }

    public static ConsoleLogConverter newInstance(String[] options) {
        return new ConsoleLogConverter();
    }

    @Override
    public void format(LogEvent event, StringBuilder toAppendTo) {
        appendAsJson(event, toAppendTo);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:27:33