Como activar o Logger.depurar () no Log4j
ao tentar executar as seguintes linhas, apenas as duas últimas declarações são exibidas ("aqui está algum erro "e" aqui está algum FATAL") e as três primeiras declarações não são exibidas.Eu tinha acabado de começar a aprender este tópico, alguém pode dizer por que isso está acontecendo?
logger.debug("Here is some DEBUG");
logger.info("Here is some INFO");
logger.warn("Here is some WARN");
logger.error("Here is some ERROR");
logger.fatal("Here is some FATAL");
a propriedade log4j tem
log4j.rootLogger=debug,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%5p] %d{mm:ss}(%F:%M:%L)%n%m%n%n
8 answers
Provavelmente tem um ficheiro log4j. properties algures no projecto. Nesse ficheiro, poderá configurar o nível de resultado da depuração que deseja. Veja este exemplo:
log4j.rootLogger=info, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
log4j.logger.com.example=debug
A primeira linha define o nível de registo do root logger como" info", ou seja, apenas informação, aviso, erro e fatal será impresso na consola (que é o appender definido um pouco abaixo disso).
A última linha define o registo para comunicação.exemplo.* (se você obter seus loggers via LogFactory.getLogger(getClass())
) estará no nível de depuração, i.e. a depuração também será impressa.
Logger.getRootLogger().setLevel(Level.DEBUG);
log4j.xml
no teu Fecho. Conteúdo: p. ex.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %5p %t %c{1}:%L - %m%n"/>
</layout>
</appender>
<root>
<level value="debug"/>
<appender-ref ref="stdout"/>
</root>
</log4j:configuration>
Isto está provavelmente a acontecer porque a sua configuração de log4j está definida em ERROR
. Procure um ficheiro de propriedades log4j com o seguinte conteúdo:
log4j.rootLogger=ERROR, CONSOLE
# console logging
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=DEBUG
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d %-5p %-20.20t %-24c{1}: %m%n
O rootLogger
está definido para ERROR
Aqui usando um CONSOLE
appender.
Note que alguns adicionadores como o appender da consola também têm uma propriedade Threshold
que pode ser usada para anular o Nível rootLoggers
. Tens de verificar ambos neste caso.
Se você está vindo aqui porque você está usando o registro Apache com log4j e log4j não está funcionando como você espera, então verifique se você realmente tem um log4j.jar no teu classpath em tempo de corrida. Essa deixou-me intrigado durante algum tempo. Configurei agora a execução no meu ambiente dev para incluir - Dlog4j. debug na linha de comandos Java para que possa sempre ver que o Log4j está a ser inicializado correctamente
Tem de ajustar o nível do registo para o mais baixo que quiser mostrar. Por exemplo, se quiser mostrar as mensagens de depuração, terá de definir o nível do registo para depurar.
O manual Apache log4j tem uma secção Sobre configuração.
Gosto de usar um appender de ficheiros para gravar a informação de registo num ficheiro. O meu ficheiro de propriedades log4j é parecido com isto. Eu prefiro desta forma, uma vez que eu gosto de fazer o registro específico do pacote no caso de eu precisar de vários graus de registro para diferentes pacotes. Apenas um pacote é mencionado no exemplo.
log4j.appender.RCS=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RCS.File.DateFormat='.'yyyy-ww
#define output location
log4j.appender.RCS.File=C:temp/logs/MyService.log
#define the file layout
log4j.appender.RCS.layout=org.apache.log4j.PatternLayout
log4j.appender.RCS.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm a} %5 %c{1}: Line#%L - %m%n
log4j.rootLogger=warn
#Define package specific logging
log4j.logger.MyService=debug, RCS
Isto está a acontecer devido ao facto de o nível de registo do seu logger estar definido como 'erro' - portanto, só irá ver mensagens de erro ou acima deste nível em termos de gravidade, por isso é que também vê a mensagem 'fatal'.
Se definir o nível de registo como 'depurar' no seu registo no seu log4j.xml devias ver todas as mensagens.
Dê uma olhada na introdução log4j para explicação.