如何使用log4j2编写自定义Web服务appender?

时间:2015-05-04 13:01:52

标签: java logging log4j2 appender

我尝试使用log4j2.its编写自定义appender正常工作,在控制台中打印日志。但我想使用log4j2编写一个自定义webservice appender。

这是我的自定义appender类。

@Plugin(name = "MyCustomAppender", category = "Core", elementType = "appender", printObject = true)
public class MyCustomAppender extends AbstractAppender {

    protected MyCustomAppender(String name, Filter filter,
            Layout<? extends Serializable> layout, String filename) {
        super(name, filter, layout);

        // TODO Auto-generated constructor stub
    }

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



                return new MyCustomAppender(name, filter, layout,fileName);        
            }


    @Override
    public void append(LogEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("inside appender: " +arg0);

    }

}

我的 log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- status = level of INTERNAL Log4j events that should be logged to the console, used to debug log4j itself -->
<Configuration status="warn" packages="com.msr.appender">

    <Appenders>
        <MyCustomAppender name="myapp"  >
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </MyCustomAppender>

    </Appenders>
    <Loggers>
    <Root level="all" additivity="false">
    <AppenderRef ref="myapp"/>
    </Root>
  </Loggers>
</Configuration>

我的应用程序中有不同的日志,即事务日志,审计日志和异常日志。这些日志可以发布到服务中。我正在使用这个服务 logapplication如下所示。请提供任何示例代码或任何建议。enter image description here

1 个答案:

答案 0 :(得分:1)

据我所知,你走在正确的轨道上。您已成功创建自定义appender,对其进行配置并确认它正在运行(登录到控制台)。

下一步是:

  • append(LogEvent)方法中,执行操作以将此信息发送到外部服务。 LogEvent对象实现java.io.Serializable,因此序列化日志事件可能是将此信息转换为字节的最简单方法。详细信息取决于您选择的外部服务的API。
  • 在您的配置中,您可能希望区分各种类型的日志事件(您提到审计,事务和例外)。我建议你看看Log4j2 Markers。这提供了一种标记特定日志事件的简洁方法,因此可以在下游以不同方式处理它们另一种方法是为这些类型配置单独的记录器,但这很快就会变得混乱。