Как написать пользовательский веб-сервис appender, используя log4j2?
Я попытался написать собственный appender, используя log4j2.its, работающий нормально, и печатать логи в консоли. Но я хочу написать пользовательский веб-сервис, используя log4j2.
это мой пользовательский класс 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, как показано на рисунке ниже. Пожалуйста, предоставьте любой пример кода или любые предложения по этому вопросу.
1 ответ
Насколько я вижу, вы на правильном пути. Вы успешно создали собственный appender, настроили его и подтвердили, что он работает (вход в консоль).
Следующим шагом будет:
- в
append(LogEvent)
метод, сделайте что-нибудь, чтобы отправить эту информацию вашей внешней службе.LogEvent
объект реализуетjava.io.Serializable
так что сериализация событий журнала может быть самым простым способом превратить эту информацию в байты. Детали зависят от API выбранного вами внешнего сервиса. - В вашей конфигурации вы можете различать различные типы событий журнала (вы упоминаете аудит, транзакции и исключения). Я рекомендую вам взглянуть на Log4j2 Маркеры. Это обеспечивает чистый способ пометить определенные события журнала, чтобы они могли обрабатываться по-разному вниз по течению. Альтернативой является настройка отдельных регистраторов для этих типов, но это очень быстро запутается.