файл свойств log4j2 для пользовательского приложения

#java #log4j2

#java #log4j2

Вопрос:

Я создал пользовательское приложение, и оно не вызывается при запуске моего теста. Вот как выглядят свойства:

 name=config
appenders=console, myCustomAppender

appender.console.type=Console
appender.console.name=STDOUT
appender.console.layout.type=PatternLayout
#appender.console.layout.pattern =%d{HH:mm:ss} [%t] %c{1} [%-5level] - %msg%n
appender.console.layout.pattern=%d{dd-MM-yyyy HH:mm:ss} [%-5p] (%F:%L) - %m%n

appender.myCustomAppender = com.myCompany.logging.log4j.WindowsEventLogAppender
appender.myCustomAppender.name = WindowsEventLogAppender
appender.myCustomAppender.type = WindowsEventLogAppender

rootLogger.level=info
rootLogger.appenderRefs=stdout, myCustomAppender
rootLogger.appenderRef.stdout.ref=STDOUT
  

Мое приложение называется WindowsEventLogAppender. Есть идеи, что не так с моим файлом свойств? Я вижу тестовые сообщения консоли, но ни одно из сообщений от моего приложения. Прямо сейчас я просто выполняю System.out.println в своем пользовательском приложении, чтобы убедиться, что оно вызывается.

Кстати, я нашел множество примеров XML для конфигураций log4j2 с пользовательскими приложениями, но ни одного для использования файла свойств для настройки.

Спасибо, -Майк

Комментарии:

1. хорошо, почему бы вам не выбрать загрузку xml? Это стандартный и рекомендуемый способ. И к тому же простой. Не хочу показаться снисходительным, просто предположение

2. Я заставил его работать с форматом XML, но у нас есть много компонентов, которые используют файлы конфигурации .properties. Я подумал, что сохранение .properties было бы лучшим способом продвижения вперед, потому что мне не пришлось бы конвертировать кучу файлов .properties в XML. Плюс, казалось бы, это должно работать правильно? Иначе зачем предоставлять метод .properties.

Ответ №1:

Возможно, я здесь довольно поздно, но я думаю, что мой ответ может помочь другим людям, ищущим ответы. Пожалуйста, примите это как ответ, если это правильно!

Если вы создали пользовательское приложение, имеющее аннотацию, подобную этой:

 @Plugin(name = "MyCustomAppender", category = "Core", 
elementType = "appender", printObject = true)
public final class MyCustomAppenderImpl extends AbstractAppender {
  // other code for the plugin....
}
  

В руководстве log4j2 по настройке приложений указано, что:

«Приложение настраивается либо с использованием имени конкретного плагина appender, либо с помощью элемента appender и атрибута type, содержащего имя плагина appender»

Значение type для appender должно быть Name значением атрибута плагина Appender.

Который в приведенном выше случае является MyCustomAppender ( appender.identifierName.type=MyCustomAppender )

Итак, конфигурация файла свойств, чтобы это работало, должна быть:

(Примечание: я добавил стандартное (консольное) приложение, просто чтобы показать актуальность / сходство использования с приложениями OOTB, и 2 примера использования с rootLogger и пользовательским регистратором)

 # this packages attribute is important, please put comma seperated package(s) to the 
# plugin(s) you have created
packages = com.package.to.your.plugin

# Example: Declare and Define OOTB Console appender, which sends log events to stdout
appender.console.name = stdout
appender.console.type = Console

# Declare and define the custom appender like this
# Note that the "abc" in "appender.abc.type" can be anything
# and the value for "appender.abc.type" should be the same as 
# "Name" attribute value given in custom appender plugin which is "MyCustomAppender"
appender.abc.name=arbitrary_name
appender.abc.type=MyCustomAppender

rootLogger.appenderRef.stdout.ref = stdout
rootLogger.appenderRef.abc.ref = arbitrary_name    

logger.loggeridentifier.name = com.test.SomeClass
logger.loggeridentifier.appenderRef.stdout.ref = stdout
logger.loggeridentifier.appenderRef.abc.ref = arbitrary_name

# Also note that the value of appenderRef should be the same name given to your 
# appender in properties file, which in this case is "arbitrary_name" (as given above)
  

Ответ №2:

Попробуйте добавить свойство packages.

Например: пакеты = com.MyCompany

Ответ №3:

Вы не включили информацию о пакете

попробуйте приведенную ниже конфигурацию.

 name=config
appenders=console, myCustomAppender
appender.console.type=Console
appender.console.name=STDOUT
appender.console.layout.type=PatternLayout
#appender.console.layout.pattern =%d{HH:mm:ss} [%t] %c{1} [%-5level] - %msg%n
appender.console.layout.pattern=%d{dd-MM-yyyy HH:mm:ss} [%-5p] (%F:%L) - %m%n
appender.myCustomAppender = com.myCompany.logging.log4j.WindowsEventLogAppender
appender.myCustomAppender.name = WindowsEventLogAppender
appender.myCustomAppender.type = WindowsEventLogAppender
rootLogger.level=info
rootLogger.appenderRefs=stdout, myCustomAppender
rootLogger.appenderRef.stdout.ref=STDOUT
rootLogger.com.mycompany.example=INFO,STDOUT