Если вы используете maven, обычно вы ставите log4j.properties под java или ресурсы?

Где я должен поместить файл log4j.properties при использовании обычных каталогов Maven?

Ответ 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);