#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