我尝试使用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如下所示。请提供任何示例代码或任何建议。
答案 0 :(得分:1)
据我所知,你走在正确的轨道上。您已成功创建自定义appender,对其进行配置并确认它正在运行(登录到控制台)。
下一步是:
append(LogEvent)
方法中,执行操作以将此信息发送到外部服务。 LogEvent
对象实现java.io.Serializable
,因此序列化日志事件可能是将此信息转换为字节的最简单方法。详细信息取决于您选择的外部服务的API。