Как написать пользовательский веб-сервис 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 Маркеры. Это обеспечивает чистый способ пометить определенные события журнала, чтобы они могли обрабатываться по-разному вниз по течению. Альтернативой является настройка отдельных регистраторов для этих типов, но это очень быстро запутается.
Другие вопросы по тегам