Estou interessado em alterar programaticamente o nível de log no Log4j2. Eu tentei olhar a documentação de configuração, mas não parecia haver nada. Eu também tentei procurar no pacote:, org.apache.logging.log4j.core.config
mas nada ali parecia útil também.
108
Respostas:
EDITADO de acordo com log4j2 versão 2.4 FAQ
Você pode definir um nível de logger com a classe Configurator do Log4j Core. MAS esteja ciente de que a classe Configurator não faz parte da API pública.
Fonte
EDITADO para refletir as mudanças na API introduzidas no Log4j2 versão 2.0.2
Se você deseja alterar o nível do logger raiz, faça algo assim:
Aqui está o javadoc para LoggerConfig.
fonte
A resposta aceita por @slaadvak não funcionou para mim para Log4j2 2.8.2 . O seguinte fez.
Para alterar o log
Level
universalmente, use:Para alterar o registro
Level
apenas da classe atual, use:fonte
Se você deseja alterar um único nível de logger específico (não o logger root ou loggers configurados no arquivo de configuração), você pode fazer isso:
fonte
setLevel(logger, Level.ERROR);
e as instruções logger.debug ainda impressas. Meu arquivo log4j2.xml está em pastebin.com/fcbV2mTWEncontrei uma boa resposta aqui: https://garygregory.wordpress.com/2016/01/11/changing-log-levels-in-log4j2/
Você pode usar org.apache.logging.log4j.core.config.Configurator para definir o nível de um registrador específico.
fonte
A abordagem programática é bastante intrusiva. Talvez você deva verificar o suporte JMX fornecido pelo Log4J2:
Habilite a porta JMX na inicialização do seu aplicativo:
-Dcom.sun.management.jmxremote.port = [port_num]
Use qualquer um dos clientes JMX disponíveis (o JVM fornece um em JAVA_HOME / bin / jconsole.exe) ao executar seu aplicativo.
No JConsole, procure o bean "org.apache.logging.log4j2.Loggers"
Finalmente, mude o nível do seu logger
O que mais gosto disso é que você não precisa modificar seu código ou configuração para gerenciar isso. É tudo externo e transparente.
Mais informações: http://logging.apache.org/log4j/2.x/manual/jmx.html
fonte
A maioria das respostas, por padrão, assume que o log deve ser aditivo. Mas digamos que algum pacote esteja gerando muitos logs e você queira desligar o log apenas para aquele logger específico. Aqui está o código que usei para fazê-lo funcionar
Um caso de teste para o mesmo
Supondo que o seguinte log4j2.xml esteja no classpath
fonte
Uma maneira incomum que descobri de fazer é criar dois arquivos separados com níveis de registro diferentes.
Por exemplo. log4j2.xml e log4j-debug.xml Agora altere a configuração desses arquivos.
Código de amostra:
fonte