【问题标题】:custom appender plugin not detected by log4j2log4j2 未检测到自定义 appender 插件
【发布时间】:2015-05-13 07:42:38
【问题描述】:

我正在尝试为 log4j 2.0 创建一个自定义附加程序,但在让我的 log4j 配置识别附加程序时遇到问题。我知道 log4j 2.0 不支持配置属性中的包。所以我尝试按照here 的建议,使用纯 javac 运行代码,但即便如此,它也会出现此错误:2015-03-11 18:47:35,281 ERROR Error processing element Test: CLASS_NOT_FOUND 2015-03-11 18:47:35,307 ERROR Unable to locate appender test1 for logger

这是我的自定义附加程序:

@Plugin(name = "Test", category = "Core", elementType = "appender", printObject = true)
public class TestAppender extends AbstractAppender{
protected TestAppender(String name, Filter filter,
        Layout<? extends Serializable> layout, boolean ignoreExceptions) {
    super(name, filter, layout, ignoreExceptions);
    // TODO Auto-generated constructor stub
}

@PluginFactory
public static TestAppender createAppender(@PluginAttribute("name") String name,
        @PluginAttribute("ignoreExceptions") boolean ignoreExceptions,
        @PluginElement("Layout") Layout<? extends Serializable> layout,
        @PluginElement("Filters") Filter filter) {



    return new TestAppender(name, filter, layout, true);        
}

public void append(LogEvent event) {
    // TODO Auto-generated method stub
    System.out.println(event.getMessage());
}

}

和我的配置 xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" >
<Appenders>
    <Test name="test1" >
        <PatternLayout pattern="%d %msg%n" />
        <ThresholdFilter level="DEBUG" />
    </Test>
</Appenders>
<Loggers>
    <Root level="DEBUG">
        <AppenderRef ref="test1" />
    </Root>
</Loggers>
</Configuration>

在此先感谢您提供任何有用的意见

【问题讨论】:

    标签: java log4j2 appender


    【解决方案1】:

    查看文档 here,您可能在 maven 编译器插件中缺少注释处理器配置。

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.1</version>
      <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>
    

    【讨论】:

      【解决方案2】:

      我在附加程序之前的 log4j2.xml 配置中添加了包含自定义附加程序的包,它没有错误地拾取自定义附加程序。

      <Configuration packages="com.yourcompany.yourcustomappenderpackage">
      

      我提到了这个帖子 - How to Create a Custom Appender in log4j2?

      【讨论】:

      • 但是log4j2.0不支持packages属性
      • 您使用的是测试版还是发布版?我使用了 log4j-2.2.api 和 core
      • 这个答案是正确的。 log4j2支持packages属性,我用它来执行触发翻转策略。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 2014-08-03
      • 1970-01-01
      相关资源
      最近更新 更多