log4j2 - установить путь к файлу из проблемы со свойствами

Я только что преобразовал log4j в log4j2, используя файл конфигурации xml. Все работает, за исключением того, что я не могу указать путь к файлам журнала с помощью файла свойств.

Это приложение Spring MVC, и у меня есть файл filedirs.properties, расположенный в папке src/main/resources вместе с log4j2.xml, сообщением i18n и другими файлами свойств. В нем есть простая запись: logs=G:/web/logs/. Я просмотрел другие сообщения и просто не понимаю, как правильно настроить log4j2. Вот что у меня есть:

<Configuration>
<Properties>
    <Property name="filename">${bundle:net.myapp.filedirs:logs}standard.log</Property>
</Properties>
<File name="stdLog" fileName="${filename}" ignoreExceptions="false">
    <PatternLayout pattern="%d{DEFAULT} %-5p: %c - %m%n"/>
</File>
...rest of config...

Ошибка такова:

ERROR FileManager (${bundle:net.myapp.filedir:logs}standard.log) java.io.FileNotFoundException:

Замена фактического пути работает, например,

<Property name="filename">g:/web/logs/standard.log</Property>

Я зациклился на правильной доменной части синтаксиса пакета - myapp.net не является реальным веб-сайтом, но он достаточно похож. Я пробовал пару десятков вариантов, но в режиме отладки java.util.ResourceBundle никогда не находит файл свойств filedirs, когда он проходит инициализацию log4j2. Ручной образец com.domain.messages, поэтому я в тупике, почему net.myapp.filedirs не работает.


person LWK69    schedule 13.02.2016    source источник
comment
Я рекомендую поднять это на трекере ошибок log4j2.   -  person Remko Popma    schedule 14.02.2016
comment
@ Ремко Попма, ты хочешь сказать, что это должно работать так, как я описал? Я все еще относительно новичок в Java и Spring, поэтому я решил, что совершил ошибку новичка или неправильно понял, как это должно работать...   -  person LWK69    schedule 14.02.2016
comment
Они будут рады помочь в любом случае.   -  person Remko Popma    schedule 14.02.2016
comment
Ну, я понял это. Я обнаружил, что на уровне «Конфигурация» есть параметр status=debug, который я включил. Я также вернулся к отладке классов ResourceBundle и FileAppender. Одна вещь, которую я заметил в сообщениях отладки конфигурации, заключается в том, что контекст был установлен для моего домена, myapp, поэтому я устал от одной конфигурации пакета, которую я не пробовал ранее: '‹Property name=filename›${bundle:filedir:logs} стандартный.лог‹/Свойство›». Это сработало! Получается, что документация неверна? Я потратил почти весь день на это - не счастливый кемпер ...   -  person LWK69    schedule 14.02.2016
comment
Не могли бы вы поднять это на трекере Log4j2 Jira? Я заметил, что страница руководства для поиска (logging.apache.org/log4j /2.x/manual/lookups.html) даже не упоминает поиск пакетов ресурсов...   -  person Remko Popma    schedule 14.02.2016
comment
Без проблем. Я уходил из раздела «Подстановка свойств» для получения инструкций по этому вопросу: логирование. apache.org/log4j/2.0/manual/.   -  person LWK69    schedule 14.02.2016


Ответы (1)


Как я указал в своем комментарии, получается, что это работает, но руководство может быть неверным. Вместо com.domain.messages, как описано здесь, подстановка свойств, сработало следующее: просто messages, например, <Property name="filename">${bundle:filedir:logs}standard.log</Property>. Добавление status=debug к <Configuration>, наконец, помогло мне понять это.

Я не знаю, имеет ли это какое-то значение, но я тестирую через STS (localhost) на своем ПК - возможно ли, что документация может быть правильной для рабочего веб-сайта? Понятия не имею, так как у меня еще нет производственного развертывания, но я проверю это, когда запущу его.

person LWK69    schedule 14.02.2016