Pergunta sobre logging, configuration, java, log4j – Layout log4j diferente para depuração e erro?

6

Em log4j, existe uma maneira de ter logger.error ("") e logger.debug ("") incluem diferentes layouts de saída?

Eu gostaria que os erros incluíssem nomes de métodos e números de linhas, o que reduz o desempenho do aplicativo.

EDITAR:

Depois de adicionar o apache-log4j-extras, o seguinte arquivo de configuração funciona.

<code><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="WARNINGS" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="warnings.log"/>
        <param name="DatePattern" value="'.'yyyy-MM-dd"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss} %-5p %c - %m%n%n"/>
        </layout>
        <filter class="org.apache.log4j.filter.LevelRangeFilter">
            <param name="LevelMin" value="DEBUG"/>
            <param name="LevelMax" value="WARN"/>
        </filter>
    </appender>

    <appender name="ERRORS" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="errors.log"/>
        <param name="DatePattern" value="'.'yyyy-MM-dd"/>
        <layout class="org.apache.log4j.PatternLayout">
            <!-- %M for method name , %L for line number  -->
            <param name="ConversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss} %-5p %c %M %L - %m%n%n"/>
        </layout>
        <filter class="org.apache.log4j.filter.LevelRangeFilter">
            <param name="LevelMin" value="ERROR"/>
            <param name="LevelMax" value="FATAL"/>
        </filter>
    </appender>

    <logger name="com.foo.bar">
        <appender-ref ref="WARNINGS"/>
        <appender-ref ref="ERRORS"/>
    </logger>

</log4j:configuration>
</code>

Este código foi usado para testar

<code>// goes to errors.txt
     log.error("error");
//goes to warnings.txt
     log.warn("warn");
</code>
Em seu ConversionPattern, você pode querer usar% d {ISO8601} é um formatador de tempo otimizado que o log4j fornece como uma conveniência e para considerações de velocidade. Gandalf
@Gandalf obrigado. Vai tentar. sal

Sua resposta

2   a resposta
9

você pode criar dois anexadores, cada um usando umLevelMatchFilter e cada um com uma saída de padrão separada.

Eu gosto disso. Existe um exemplo que você pode me indicar? sal
O link LevelMatchFilter não funciona mais Kairan
1

Eu apenas configuraria dois loggers diferentes. Um chamado ERROR e um chamado DEBUG. Então você pode facilmente configurar diferentes layouts de saída e apenas chamar ERROR.error ou DEBUG.debug.

Até pessoas inteligentes dizem coisas estúpidas de vez em quando. Eu não tomaria meus comentários críticos sobre seu conselho no log4j e nesta ocasião em particular como pessoal. Ceki
@Gandalf, é assim que estou fazendo agora e não gosto de ter vários madeireiros para uma aula. Parecia muito hacky até para mim. sal
Mau conselho. Usuários desavisados ​​podem seguir seus conselhos, o que seria bastante lamentável. Ceki
Se você se sentir assim, por favor, me diga por que - não cegamente diga que algo é um mau conselho sem dar um conselho melhor. Por que seria lamentável? Gandalf

Perguntas relacionadas