Якщо ви використовуєте maven, зазвичай ви ставите log4j.properties під Java або ресурси?


128

Куди слід помістити файл log4j.properties, коли використовуються звичайні каталоги Maven?


6
src / test / ресурси - споживач вашого артефакту встановлює рівні реєстрації, необхідні для розгортання. Однак я б рекомендував slf4j, якщо ви робите це для комерційних робіт. Це дає можливість перемикати рамки ведення журналу при розгортанні. slf4j.org
Девід Віктор

2
BTW, якщо ви просто хочете експериментувати, можливо використовувати log4j без конфігураційного файла властивостей / xml. З ' logging.apache.org/log4j/1.2/manual.html - Конфігурація' "Викликання методу BasicConfigurator.configure створює досить просту настройку log4j." Також дивіться: logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/… maven.apache.org/plugins/maven-resources-plugin/examples/…
Девід Віктор

Відповіді:


141

src/main/resources - це "стандартне розміщення" для цього.

Оновлення: вищезазначене відповідає на питання, але це не найкраще рішення. Ознайомтесь з іншими відповідями та коментарями до цього… ви, ймовірно, не доставляєте свої власні властивості журналу за допомогою jar, а натомість залишаєте це клієнту (наприклад, сервер додатків, сценарій середовища тощо) для налаштування потрібного журналу. Таким чином, розміщення його src/test/resourcesє моїм кращим рішенням.

Примітка: Якщо говорити про вихід з конфігурації журналу бетону для клієнта / користувача, ви повинні розглянути питання про заміну log4jз slf4jв вашому додатку.


Я не виявив, що створені ресурси не будуть створені. Чи потрібно це робити вручну?
користувач496949

3
так. Створіть вручну resourcesі log4j.propertiesв папці, зазначеній у відповіді.
Нішант

@ user496949: файли під src/main/resourcesбуде скопійовано за замовчуванням доtarget/classes
сплеск

17
Якщо ви не збираєтесь експортувати налаштування log4j як частину свого артефакту - набагато краще помістити його під src / test / ресурси
Девід Віктор,

1
@FerasOdeh, щоб виключити його із створених артефактів (банки, війни тощо) і використовувати його лише під час тестування, "Якщо ви не маєте наміру експортувати налаштування log4j як частину свого артефакту".
Алі Шакіба

60

Просто поклавши його 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-плагін для його створення. Всередині цього плагіна ви можете додати поточну папку JAR до шляху до класу, додавши aClass-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каталогу.


2
іншим варіантом може бути поставити його під src / test / ресурси, щоб він не отримував пакет.
rogerdpack

Ого. Дякую за це. Це було саме те, що мені потрібно!
блаженство

@ Zoltán, мені важко продовжувати додавати вихідний каталог до classpath, як ви порадили. Чи є спосіб зробити це вручну, як-от зайти у файл .classpath конкретного проекту та додати туди цей вихідний каталог log4j, щоб log4j міг бачити файл .properties після того, як додаток було додано до файлу .war. Також тег targetPath, чи слід використовувати значення як є ${project.build.directory}чи слід редагувати до фактичного шляху, яким живе проект у моєму локальному диску?
Ірети

26

Деякі "обробка даних" пояснює src/main/resourcesце типовим місцем.

Результати пошуку в коді Google :

  • src/main/resources/log4j.properties: 4877
  • src/main/java/log4j.properties: 215

4
як ця відповідь відрізняється в будь-якому відношенні, ніж відповідь 20 хвилин тому? Також це resourcesне так resource, якщо я правильно пам’ятаю.
Нішант

6
@Nishant: це не інакше, тому що, коли я відкрив відповідне поле, я покинув ПК. Після повернення та відповіді на запитання я пропустив, що на питання вже відповів. resourceбула лише друкарською помилкою.
сплеск

1
Я б запропонував ознайомитись з Maven, плагіном компілятора Maven, умовами для компонування проектів Maven. Можливо, подивіться на те, що знаходиться під «ціллю», коли ваш артефакт побудований. Тоді, можливо, ви можете змінити свою відповідь.
Девід Віктор

4
Правильна відповідь - src / xxx / ресурси - це не умова. Дивіться: maven.apache.org/plugins/maven-resources-plugin/examples/… - тут "xxx" може бути "головним" або "тестом". Якщо ви не хочете надати попередньо налаштовані рівні ведення журналу, зазвичай розумніше налаштувати журнал, як це потрібно для тестування - за допомогою "src / test / ресурси" - і дозволити споживачеві вашого артефакту встановити рівень реєстрації.
Девід Віктор

22
Результати Google для "Стрибнути з моста": 18.200.000. Результати Google за
запитом

9

Ресурси, які використовуються для ініціалізації проекту, бажано містити в src / main / resource folder. Щоб увімкнути завантаження цих ресурсів під час збірки, ви можете просто додати записи до pom.xml у проект Maven як ресурс збірки

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering> 
        </resource>
    </resources>
</build> 

Інші файли .properties також можуть зберігатися в цій папці, яка використовується для ініціалізації. Фільтрування встановлюється істинним, якщо ви хочете мати деякі змінні у файлах властивостей папки ресурсів та заповнити їх у файлах властивостей профільних фільтрів, які зберігаються у src / main / filters, який задано як профілі але це зовсім інший випадок використання . Поки що ви можете їх ігнорувати.

Це чудові додаткові ресурси для ресурсів , корисні, просто переглядайте й інші розділи.


Якщо ви просто скопіювали та вставили вищевказаний фрагмент Maven, зауважте, що це </resources> </build>
rdesilva

6

Розміщення файлів ресурсів в іншому місці - це не найкраще рішення, яке ви можете використовувати:

<build>
  <resources>
    <resource>
      <directory>src/main/java</directory>
      <excludes>
        <exclude>**/*.java</exclude>
      </excludes>
    </resource>
  </resources>
<build>

Наприклад, коли файли ресурсів (наприклад, jaxb.properties) заглиблюються в пакети разом із класами Java.


1

Якщо ваш файл log4j.properties або log4j.xml не знайдено під src / main / ресурси, використовуйте цей PropertyConfigurator.configure ("log4j.xml");

   PropertyConfigurator.configure("log4j.xml");
   Logger logger = LoggerFactory.getLogger(MyClass.class);
   logger.error(message);

0

Додайте нижченаведений код із тегів ресурсів у свої теги pom.xml всередині збірок. значить, це означає, що теги ресурсів повинні знаходитися всередині тегів збірки у вашому pom.xml

<build>
    <resources>
        <resource>
            <directory>src/main/java/resources</directory>
                <filtering>true</filtering> 
         </resource>
     </resources>
<build/>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.