Конфигурация log4j через аргументы JVM?

133

Какие переменные я должен установить / передать в качестве аргументов JVM, чтобы log4j работал правильно? И под правильным я подразумеваю не жаловаться и не печатать на консоли. Могу я увидеть типичный пример?

Примечание. Мне нужно избегать создания файла log4j.properties в приложении.

jconlin
источник
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:чтобы это сработало.
OR Mapper
2
@ORMapper - Я исправил соответствующие изменения
Брайан Агнью
6
Остерегайтесь использования Log4j 2, поскольку имя свойства и синтаксис изменены. Смотрите этот ответ .
Хосе Андиас,
161

Решение использует следующий аргумент JVM:

-Dlog4j.configuration={path to file}

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

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

Дополнительная информация и примеры здесь: http://logging.apache.org/log4j/1.2/manual.html

30thh
источник
2
Для Logback:-Dlogback.configurationFile=C:\logback-test.xml
30
2
+1 за упоминание файла (повторяя то, что сказал Тим. Это несколько раз
сводило
13
Еще один аргумент JVM, очень удобный для отладки конфигурации log4j:-Dlog4j.debug
KC,
2
Можно ли использовать с этим методом относительный путь?
AaA
33

Кажется, это изменилось (вероятно, с log4j2) на:

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

См. Https://logging.apache.org/log4j/2.x/manual/configuration.html.

DL
источник
Это дает мне следующее исключение. C: \ Development \ Eclipses \ EclipseMars \ file: C: \ Users \ ABC \ log4j2.xml Как сделать путь абсолютным
Cybermonk
Для контейнеров Docker я использовал, JAVA_PARAMS="-Dlog4j.configurationFile=classpath:log4j2-container.xml"если образ Docker поддерживает переопределение JAVA_PARAMS с помощью переменных env, а файл находится внутри Jar.
Марчелло де Салес
21

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

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

-Dlog4j.configuratorClass=com.foo.BarConfigurator

Подробнее см. Http://logging.apache.org/log4j/1.2/manual.html .

Тим Бют
источник
1
Это правильное решение, если кто-то не хочет создавать файл конфигурации. Внутри вашего собственного настраиваемого класса конфигуратора вы можете вызвать BasicConfigurator () или создать свои собственные регистраторы и приложения, как хотите. Но я бы предпочел файл конфигурации!
skiphoppy
11

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

Наталия
источник
1
Это правда: -Dlog4j.configuration требуется только в том случае, если файл не был в пути к классам или если вы хотите использовать файл, который не является первым, найденным в пути к классам
javadba
8

Поздно к вечеринке, поскольку с 2015 года Log4J 1.x достиг EOL .

Log4J 2.x и далее опция JVM должна быть-Dlog4j.configurationFile=<filename>


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

Винит Менон
источник
2
Важный ответ, так как другие ответы уже недействительны.
Yossale
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
ridox
источник
0

Если вы используете gradle. Вы можете применить плагин aplication и использовать следующую команду

  applicationDefaultJvmArgs = [
             "-Dlog4j.configurationFile=your.xml",
                              ]
emanuel07
источник