我的迁移EAR应用程序从log4j
到log4j2
。我有类扩展appender,过滤器,在不同的罐子里的布局和现在,我已经将它们转换为插件。这意味着我有多个jar中的自定义插件(假设有3个jar)。自定义插件不在EAR得到检测与log4j2 API
我不使用log4j2.xml
packages
属性和我通过使用Dlog4j.configurationFile
JVM参数指向log4j2.xml
位置EAR的META-INF
初始化日志系统。
在所有三个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
就是一个自定义模式转换器插件被写入到这个字符串转换自定义模式。对于上述图案布局(在jar1)
<Pattern>%d %-5p [%c{1}] [EventId: %e] [%t] %m%n</Pattern>
定制转换器插件:
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"
我使用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
在EAR罐子。
我已经定义了一个自定义模式转换器插件,并期望该转换器被应用到所有的图案布局,包括使用<patternlayout>
定义的默认模式布局。这是正确的吗 ?
如果是,请帮助,如果任何人面对这个问题,并指导我,如果我错了,因为他们都没有得到来自EAR罐检测定义自定义插件。