【发布时间】:2016-01-17 19:46:35
【问题描述】:
我正在将 EAR 应用程序从 log4j 迁移到 log4j2。我在不同的 EAR jar 中扩展了附加程序、过滤器、布局的类,现在,我已将它们转换为插件。这意味着我在不止一个罐子里有自定义插件(假设 3 个罐子)。
我没有在log4j2.xml 中使用packages 属性,而是使用指向EAR 的META-INF 中的log4j2.xml 位置的Dlog4j.configurationFile JVM 参数来初始化日志系统。
在所有三个 jar 项目中添加以下插件均无效。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>log4j-plugin-processor</id>
<goals>
<goal>compile</goal>
</goals>
<phase>process-classes</phase>
<configuration>
<proc>only</proc>
<annotationProcessors>
<annotationProcessor>org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor</annotationProcessor>
</annotationProcessors>
</configuration>
</execution>
</executions>
</plugin>
图案布局:
在下面的模式布局中,e 是自定义模式,其中编写了自定义模式转换器插件来转换此字符串。
<Pattern>%d %-5p [%c{1}] [EventId: %e] [%t] %m%n</Pattern>
上述模式布局的自定义转换器插件(在 jar1 中):
jar1 在org.apache.. 文件夹中的META-INF 下有Log4J2Plugins.dat 文件。
@Plugin(name = "EventPatternConverter", category = "Converter")
@ConverterKeys({"e"})
public class EventPatternConverter extends LogEventPatternConverter {
protected EventPatternConverter(String name, String style) {
super(name, style);
}
public static EventPatternConverter newInstance(String[] options) {
return new EventPatternConverter("e", "e");
}
@Override
public void format(LogEvent event, StringBuilder toAppendTo) {
String eventId= "";
// Append empty string (OR) value
toAppendTo.append(eventId);
}
}
但是,我收到以下错误
ERROR Unrecognized format specifier [e]
甚至,没有一个自定义插件被识别,因为我得到了invalid element,其余的自定义插件都在 jar2、jar3 中可用,并且它们都有 Log4J2Plugins.dat 文件。
ERROR File contains an invalid element or attribute "TestFilter"
我在 EAR 中使用 log4j-api-2.4.jar、log4j-core-2.4.jar、log4j-jcl-2.4.jar、log4j-web-2.4.1.jar、commons-logging-1.1.1.jar 罐子。
我已经定义了一个自定义模式转换器插件,并希望这个转换器能够应用于所有模式布局,包括使用<patternlayout> 定义的默认模式布局。是这样吗?
如果是,如果有人遇到此问题,请提供帮助,如果我在定义自定义插件时出错,请指导我,因为它们都没有从 EAR 中的 jar 中检测到。
【问题讨论】:
标签: java logging log4j log4j2 apache-commons-logging