Где я должен поместить файл log4j.properties при использовании обычных каталогов Maven?
Если вы используете maven, обычно вы ставите log4j.properties под java или ресурсы?
Ответ 1
src/main/resources
- это стандартное размещение для этого.
Обновление:. Вышеупомянутый вопрос отвечает, но это не лучшее решение. Ознакомьтесь с другими ответами и комментариями по этому вопросу... вы, вероятно, не отправляли свои собственные свойства ведения журнала с помощью jar, но вместо этого оставите его клиенту (например, app-server, stage environment и т.д.), Чтобы настроить нужный журнал. Таким образом, размещение его в src/test/resources
является моим предпочтительным решением.
Примечание.. Говоря о том, чтобы оставить конкретную конфигурацию журнала клиенту/пользователю, вы должны рассмотреть возможность замены log4j
на slf4j
в вашем приложении.
Ответ 2
Просто поместите его в src/main/resources
, чтобы связать его внутри артефакта. Например. если ваш артефакт является JAR, у вас будет файл log4j.properties
внутри него, теряя исходную точку для настройки журнала.
Обычно я помещаю его в src/main/resources
и устанавливаю его для вывода так:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}</targetPath>
<includes>
<include>log4j.properties</include>
</includes>
</resource>
</resources>
</build>
Кроме того, для того, чтобы log4j действительно видел его, вам нужно добавить выходной каталог в путь класса.
Если ваш артефакт является исполняемым JAR, вы, вероятно, использовали его для создания maven-assembly-plugin. Внутри этого плагина вы можете добавить текущую папку JAR к пути класса, добавив запись манифеста Class-Path
, например:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.your-package.Main</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Теперь файл log4j.properties будет находиться рядом с вашим JAR файлом, независимо настраиваемым.
Чтобы запустить приложение непосредственно из Eclipse, добавьте каталог resources
в свой путь к классам в вашей конфигурации выполнения: Run->Run Configurations...->Java Application->New
выберите вкладку Classpath
, выберите Advanced
и перейдите в каталог src/resources
.
Ответ 3
Некоторые "учетные данные" для этого src/main/resources
являются типичным местом.
Результаты Поиск кода Google:
-
src/main/resources/log4j.properties
: 4877 -
src/main/java/log4j.properties
: 215
Ответ 4
Ресурсы, используемые для инициализации проекта, предпочтительно помещаются в папку src/main/resources. Чтобы включить загрузку этих ресурсов во время сборки, можно просто добавить записи в проект pom.xml в maven как ресурс сборки
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
Другие файлы .properties также могут храниться в этой папке, используемой для инициализации. Фильтрация задана как истина, если вы хотите иметь некоторые переменные в папках свойств папки ресурсов и заполнять их из файлов свойств фильтров профиля, которые хранятся в файлах src/main/filters, которые заданы как профили, но это совсем другой вариант использования. Пока вы можете игнорировать их.
Это отличный ресурс плагины ресурсов maven, он полезен, просто просматривайте и другие разделы.
Ответ 5
При размещении файлов ресурсов в другом месте это не лучшее решение, которое вы можете использовать:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<build>
Например, когда файлы ресурсов (например, jaxb.properties) проникают глубоко внутри пакетов вместе с классами Java.
Ответ 6
Если ваш файл log4j.properties или log4j.xml, не найденный в src/main/resources, использует этот PropertyConfigurator.configure( "log4j.xml" );
PropertyConfigurator.configure("log4j.xml");
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.error(message);