Ошибка файла конфигурации log4j2 найдена, если log4j2.xml не находится в двух папках одновременно - PullRequest
0 голосов
/ 09 мая 2019

У меня есть такая структура проекта:

tomcat
    webapps
        ProjectName
            src
                main
                    java
                    resources
                            log4j2.xml
                    webapp
                        WEB-INF
                          web.xml
                          lib
                          classes
                            com
                               mysite
                                     MyClass.class
                            log4j2.xml

Итак, есть три возможных сценария:

  1. log4j2.xml находится в ресурсах и классах папках
  2. log4j2.xml находится только в ресурсах
  3. log4j2.xml находится только в классах

В сценарии first код, с которого я запускаю MyClass.java:

Logger logger = LogManager.getLogger(MyClass.class);
logger.debug("Debug log message");
logger.info("Info log message");
logger.error("Error log message");

отлично работает.

В сценарии second он в большинстве случаев не работает, но иногда работает и, кажется, копирует файл в папку classes . Похоже, что работать и копировать, только если я попробовал сценарий thrid прямо перед.

В третий сценарий не работает и удаляет файл из классов .

Под «работой» я подразумеваю распечатывает сообщения отладки, под «не работает» я имею в виду распечатывает ошибку No log4j2 configuration file found error.

Я думал, что он будет искать файл в папках проекта, и, найдя его, будет использовать его без проблем. Но здесь, похоже, он работает только тогда, когда он находится в папках resources и classes , и я не понимаю, почему. Кажется, в игре присутствует серьезная магия, и я совершенно не в курсе.

РЕДАКТИРОВАТЬ : я работаю в Idea Intellij и у меня есть pom.xml с зависимостями и некоторыми компонентами сборки (не связанными с log4j2). Там есть зависимость log4j2, однако в теге build или где-либо еще в файле ничего нет о log4j2. Я новичок в Maven, но мне кажется, это не имеет значения в этом случае? Я не запускаю команду build. Я щелкаю правой кнопкой мыши MyClass.java (, а не на зеленой стрелке Maven 'Run Maven Build') и нажимаю зеленую стрелку Run MyClass.main().

РЕДАКТИРОВАТЬ : у меня есть эта строка в pom.xml:

<build>
     <outputDirectory>${basedir}\src\main\webapp\WEB-INF\classes</outputDirectory>
     ...
</build>

Что влияет на каталог компиляции файла, так что это может оказать влияние.

EDIT : Кроме того, я читаю это руководство по log4j2 , и они говорят, что достаточно поместить log4j2.xml в любом месте в путь к классам приложения. Помещение log4j2.xml только в resources отлично работает для них.

И Idea Intellij знает о папках resources в моем случае, когда я перехожу к Структуре проекта - Модули:

enter image description here

...