我有一个简单的自定义JSON布局,我想在Log4J2中实现。根据他们的文档,我创建了以下类(为简便起见,省略了一些方法)。
@Plugin(name = "CustomJSONLayout", category = "Core", elementType = "layout", printObject = true)
public class MyCustomLayout extends AbstractStringLayout {
@PluginFactory
public static MyCustomLayout createLayout(
@PluginAttribute(value = "charset", defaultString = "UTF-8") Charset charset,
@PluginAttribute(value = "pretty") boolean pretty,
@PluginAttribute(value = "pretty-exceptions", defaultBoolean = true) boolean prettyExceptions) {
return new MyCustomLayout(charset, pretty, prettyExceptions);
}
}
当我在IntelliJ中本地运行或通过maven clean install运行它时,它会使用我的自定义布局记录到控制台,而不会出现任何问题。
但是,当我尝试将其作为独立的Jar java -jar ...
运行时,会出现以下错误:
2019-07-26 17:13:27,435 main ERROR Unable to invoke factory method in class org.apache.logging.log4j.core.appender.ConsoleAppender for element Console: java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.ConsoleAppender java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.ConsoleAppender
然后它抱怨找不到插件文件。奇怪的是,每当我在IDE(INtelliJ)中运行它时,我都不会遇到这个问题,所以我不确定是什么原因造成的。
我不知道是什么导致了这种奇怪的行为。有人建议这可能是Spring类加载器接管的方式,但到目前为止,我还没有找到解决方案。