У меня есть такая структура проекта:
tomcat
webapps
ProjectName
src
main
java
resources
log4j2.xml
webapp
WEB-INF
web.xml
lib
classes
com
mysite
MyClass.class
log4j2.xml
Итак, есть три возможных сценария:
log4j2.xml
находится в ресурсах и классах папках
log4j2.xml
находится только в ресурсах
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
в моем случае, когда я перехожу к Структуре проекта - Модули: