конфігурація log4j через аргументи (файли) JVM?


133

Які змінні мені потрібно встановити / передати як аргументи JVM, щоб заставити log4j правильно працювати? І я правильно маю на увазі не скаржитися і не друкувати на консоль. Чи можу я побачити типовий приклад?

Примітка. Мені потрібно уникати створення файлу log4j.properties у програмі.


2
Читайте, будьте уважні: важливо помітити, що питання задається про log4j, а не log4j2.
neves

Відповіді:


161

У вас є файл конфігурації log4j? Просто посилайтеся на нього за допомогою

-Dlog4j.configuration={path to file}

де {шлях до файлу} має бути префіксом file:

Редагувати: Якщо ви працюєте з log4j2, вам потрібно скористатися

-Dlog4j.configurationFile={path to file}

Взяте з відповіді https://stackoverflow.com/a/34001970/552525


Брайан - не зовсім те, що я шукав, але я вважаю, що це гідний компроміс між переміщенням файлу в мою програму та встановленням властивостей через аргументи JVM.
jconlin

Я думаю, що оскільки ваша програма стає складнішою (якщо вона буде), то файл стає більш керованим, оскільки ви більше налаштовуєте його. Однак, зізнаюся, я здогадуюсь щодо вашого випадку використання тут.
Брайан Агнеу

25
{path to file}потреби в передувати file:для цього до роботи.
АБО Mapper

2
@ORMapper - Я внесла відповідні зміни
Брайан Агнеу,

6
Слідкуйте за тим, щоб використовувати Log4j 2 як змінити ім'я властивості та синтаксис. Дивіться цю відповідь .
Хосе Андіас

161

Рішення використовує такий аргумент JVM:

-Dlog4j.configuration={path to file}

Якщо файл НЕ у класі class (у WEB-INF/classesвипадку Tomcat), а десь на вашому диску, використовуйте file:, як

-Dlog4j.configuration=file:C:\Users\me\log4j.xml

Більше інформації та прикладів тут: http://logging.apache.org/log4j/1.2/manual.html


2
Для зворотного зв'язку:-Dlogback.configurationFile=C:\logback-test.xml
30-го

2
+1 за згадування файлу (повторюючи те, що сказав Тім. Це кілька разів
мене зводило

13
Ще один аргумент JVM дуже зручний для налагодження log4j config:-Dlog4j.debug
KC

2
Чи можливо використовувати цей метод відносного шляху?
АаА

33

Здається, це змінилося (можливо, з log4j2) на:

-Dlog4j.configurationFile=file:C:\Users\me\log4j.xml

Побачити: https://logging.apache.org/log4j/2.x/manual/configuration.html


Це дає мені таке виняток. C: \ Development \ Eclipses \ EclipseMars \ file: C: \ Users \ ABC \ log4j2.xml Як зробити шлях абсолютним
Cybermonk

Для контейнерів Docker я використовував, JAVA_PARAMS="-Dlog4j.configurationFile=classpath:log4j2-container.xml"якщо Docker Image підтримує переосмислення JAVA_PARAMS на env vars, а файл знаходиться всередині Jar.
Marcello de Sales

21

Я знаю, що на це вже відповіли, але оскільки ви сказали, що це не саме те, що ви шукаєте, я хотів би зазначити таку альтернативу:

Ви можете також використовувати клас конфігурації замість властивостей або файлу xml.

-Dlog4j.configuratorClass=com.foo.BarConfigurator

Докладні відомості див. У розділі http://logging.apache.org/log4j/1.2/manual.html .


1
Це правильне рішення, якщо хтось хоче уникнути створення конфігураційного файла. Всередині вашого власного класу конфігуратора ви можете зателефонувати на BasicConfigurator () або створити власні Журнали та додатки, як вам захочеться. Але я б більше віддав перевагу конфігураційному файлу!
skiphoppy

11

Як правило, доки ваш файл log4j.properties знаходиться на classpath, Log4j повинен просто автоматично підбирати його при запуску JVM.


1
Це правда: -Dlog4j.configuration потрібен лише в тому випадку, якщо файл не був на classpath або якщо ви хочете використовувати файл, який не є першим, знайденим на classpath
javadba

8

Пізно до вечірки, починаючи з 2015 року, Log4J 1.x досяг EOL .

Log4J 2.x далі повинен бути варіант JVM-Dlog4j.configurationFile=<filename>


PS <filename>може бути файлом щодо шляху до класу без того, file:як пропонується в інших відповідях.


2
Важлива відповідь, оскільки інші відповіді більше не відповідають дійсності.
Йоссале

1

Відносний шлях також нормальний:

java -Dlog4j.configuration=file:".\log4j.properties" -jar com.your-1.0-SNAPSHOT.jar

або

java -Dlog4j.configuration=file:".\log4j.xml" -jar com.your-1.0-SNAPSHOT.jar

0

Якщо ви використовуєте gradle. Ви можете застосувати плагін "aplication" і скористатися наступною командою

  applicationDefaultJvmArgs = [
             "-Dlog4j.configurationFile=your.xml",
                              ]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.