configuração do log4j via argumento (s) da JVM?


133

Quais variáveis ​​eu tenho que configurar / passar como argumentos para a JVM para que o log4j seja executado corretamente? E com razão quero dizer não reclamar e imprimir no console. Posso ver um exemplo típico?

Nota: Preciso evitar criar um arquivo log4j.properties no aplicativo.


2
Leitor cuidado: é importante notar que a pergunta é feita sobre o log4j, não o log4j2.
Neves

Respostas:


161

Você tem um arquivo de configuração log4j? Basta referenciá-lo usando

-Dlog4j.configuration={path to file}

onde {caminho para o arquivo} deve ser prefixado com file:

Editar: se você estiver trabalhando com log4j2, precisará usar

-Dlog4j.configurationFile={path to file}

Retirado da resposta https://stackoverflow.com/a/34001970/552525


Brian - não exatamente o que eu estava procurando, mas acho que é um compromisso decente entre mover um arquivo para o meu aplicativo e definir as propriedades via args da JVM.
jconlin

Eu acho que à medida que seu aplicativo se torna mais complexo (se houver), o arquivo se torna mais gerenciável à medida que você o configura. No entanto, confesso que estou adivinhando o seu caso de uso aqui.
27611 Brian Agnew

25
{path to file}precisa ser anexado file:para que isso funcione.
OR Mapper

2
@ORMapper - Alterei adequadamente
Brian Agnew

6
Cuidado ao usar o Log4j 2 como o nome e a sintaxe da propriedade alterados. Veja esta resposta .
José Andias 22/08/16

161

A solução está usando o seguinte argumento da JVM:

-Dlog4j.configuration={path to file}

Se o arquivo NÃO estiver no caminho de classe (no WEB-INF/classescaso do Tomcat), mas em algum lugar no seu disco, use file:, como

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

Mais informações e exemplos aqui: http://logging.apache.org/log4j/1.2/manual.html


2
Para Logback:-Dlogback.configurationFile=C:\logback-test.xml
30 de

2
1 para mencionar arquivo (reiterando o que Tim disse Isso me louco com log4j conduzido um número de vezes..
javadba

13
Outro argumento da JVM muito útil para depurar a configuração do log4j:-Dlog4j.debug
KC

2
É possível usar o caminho relativo com este método?
AaA

33

Isso parece ter sido alterado (provavelmente com log4j2) para:

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

Consulte: https://logging.apache.org/log4j/2.x/manual/configuration.html


Isso me dá a seguinte exceção. C: Desenvolvimento \ Eclipses \ \ \ EclipseMars arquivo: C: \ Users \ ABC \ log4j2.xml Como posso fazer o caminho absoluto
Cybermonk

Para contêineres do Docker, usei JAVA_PARAMS="-Dlog4j.configurationFile=classpath:log4j2-container.xml"se a imagem do Docker suporta a substituição de JAVA_PARAMS por env vars e o arquivo está dentro do jar.
Marcello de Sales

21

Sei que isso já foi respondido, mas, como você disse, não é exatamente isso que você está procurando, gostaria de destacar a seguinte alternativa:

Você também pode usar uma classe de configuração em vez das propriedades ou do arquivo xml.

-Dlog4j.configuratorClass=com.foo.BarConfigurator

Consulte http://logging.apache.org/log4j/1.2/manual.html para obter detalhes.


1
Esta é a solução correta se alguém quiser evitar a criação de um arquivo de configuração. Dentro de sua própria classe configuradora personalizada, você pode chamar BasicConfigurator () ou criar seus próprios registradores e anexos da maneira que desejar. Mas eu preferiria muito um arquivo de configuração!
Skiphoppy 30/08/2012

11

Geralmente, desde que o arquivo log4j.properties esteja no caminho de classe, o Log4j deve buscá-lo automaticamente na inicialização da JVM.


1
Isto é verdade: o -Dlog4j.configuration só é necessária se o arquivo não estavam no classpath ou se você quiser usar um arquivo que não é o primeiro encontrado no classpath
javadba

8

Tarde para a festa desde 2015, o Log4J 1.x chegou à EOL .

Log4J 2.x em diante, a opção JVM deve ser-Dlog4j.configurationFile=<filename>


PS <filename>poderia ser um arquivo relativo ao caminho da classe sem o file:sugerido nas outras respostas.


2
Resposta importante, pois as outras respostas não são mais válidas.
Yossale

1

Caminho relativo também está ok:

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

ou

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

0

Se você estiver usando gradle. Você pode aplicar o plugin 'aplication' e usar o seguinte comando

  applicationDefaultJvmArgs = [
             "-Dlog4j.configurationFile=your.xml",
                              ]
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.