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目录,但转换器仍未注册
已完成的检查项
- 确认
ConsoleLogConverter和SocketLogResolverFactory类所在包正确,且使用@Plugin注解 - 确保
log4j2.xml配置文件在启动时加载 - 检查
@Plugin和@PluginFactory注解来自正确的Log4j包 - 排查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
相关产品推荐
相关产品推荐

