wake-up-neo.com

log4j2 mehrere Appender, mehrere Logger in config.xml

Ich versuche, eine log4j2 xml-Konfiguration einzurichten und erhalte nicht die gewünschten Ergebnisse. Ich möchte, dass meine Konsole Level-Informationen und höher abruft und der Appender für rollende Dateien (Standard) Level-Debugging und höher. Ich möchte dann 3 Klassen im Konsolen-Appender einschränken, um nur Warnung und höher zu erhalten. Wenn ich jedoch diese Logger-Einträge hinzufüge, erhält mein Standard-Appender auch nicht mehr die Info- und Debug-Levels für diese 3 Klassen. Was soll ich tun, um nur die Konsole und nicht den Standard einzuschränken?

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

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

<appender name="console" class="org.Apache.log4j.ConsoleAppender"> 
    <param name="Target" value="System.out"/> 
    <param name="threshold" value="info" />
    <layout class="org.Apache.log4j.PatternLayout"> 
        <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p %c [%t] %X{ctx} ~ %m%n" />
    </layout> 
</appender> 

<appender name="standard" class="org.Apache.log4j.DailyRollingFileAppender">
    <param name="file" value="logs/broadcast.log" />
    <param name="DatePattern" value="'.'yyyy-MM-dd" />
    <param name="threshold" value="debug" />
    <layout class="org.Apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{DATE} %-5p %c{1} [%t] %X{ctx} ~ %m%n" />
    </layout>   
</appender>

<appender name="stderr" class="org.Apache.log4j.FileAppender">
    <param name="file" value="logs/broadcast.err" />
    <param name="threshold" value="error" />
    <layout class="org.Apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{DATE} %-5p %c{1} [%t] %X{ctx} ~ %m%n" />
    </layout>
</appender>

 <appender name="jlv" class="org.Apache.log4j.net.SocketAppender">
    <param name="remoteHost" value="localhost"/>
    <param name="port" value="4445"/>
    <param name="locationInfo" value="true"/>
  </appender>

<logger name="com.mydetv.broadcast.BroadcastLoop">
    <level value="warn"/>
    <appender-ref ref="console" />
</logger>
<logger name="com.mydetv.broadcast.BroadcastUpdate22">
    <level value="warn"/>
    <appender-ref ref="console" />
</logger>
<logger name="com.mydetv.broadcast.vlc.VlcRequest22">
    <level value="warn"/>
    <appender-ref ref="console" />
</logger>

<root> 
    <priority value ="debug" /> 
    <appender-ref ref="standard" /> 
    <appender-ref ref="stderr"/> 
    <appender-ref ref="console" /> 
    <appender-ref ref="jlv"/>
</root>

</log4j:configuration>
6
phomlish

Zunächst sieht es so aus, als wäre Ihre Konfiguration für log4j-1.x und nicht für log4j2. Sie müssen dies konvertieren, wenn Sie log4j2 verwenden möchten. (Das Handbuch enthält viele Beispiele für die neue Syntax.)

Ursprünglich dachten wir, Sie müssten möglicherweise den log4j2-ThresholdFilter ( http://logging.Apache.org/log4j/2.x/manual/filters.html#ThresholdFilter ) verwenden, aber dies ist möglicherweise eine einfachere Methode:

(Übrigens, die Layoutmuster in der Beispielkonfiguration unten müssen noch bearbeitet werden, um mit Ihrer ursprünglichen Konfiguration übereinzustimmen.)

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
  <Appenders>
    <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}.log.gz"
                 ignoreExceptions="false">
      <PatternLayout>
        <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
      </PatternLayout>
      <TimeBasedTriggeringPolicy />
    </RollingFile>
    <Console name="STDOUT" target="SYSTEM_OUT" ignoreExceptions="false">
      <PatternLayout pattern="%m%n"/>
    </Console>
  </Appenders>
  <Loggers>
     <Logger name="com.mysetv.broadcast.BroadcastLoop" level="trace" additivity="false">
      <AppenderRef ref="STDOUT" level="warn" />
      <AppenderRef ref="RollingFile"/>
    </Logger>
... (add other named loggers here)...
   <Root level="trace">
      <AppenderRef ref="STDOUT" level="info" />
      <AppenderRef ref="RollingFile"/>
    </Root>
  </Loggers>
</Configuration>
6
Remko Popma

Wenn Sie die Verwendung von Appender auf eine bestimmte LogLevel beschränken möchten. Wahrscheinlich ist die richtige Antwort die Verwendung von Filtern. Bitte werfen Sie einen Blick auf Spezifischer Logger für Level

1
N0mi

Behebung mit GEventEvaluator und benutzerdefiniertem Groovy-Scripting: http://logback.qos.ch/manual/filters.html#GEventEvaluator

<configuration>
    <property name="LAYOUT" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n" />

    <root>
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
                <evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator">
                    <expression>e.level.toInt() >= WARN.toInt()</expression>
                </evaluator>
                <OnMatch>ACCEPT</OnMatch>
                <OnMismatch>DENY</OnMismatch>
            </filter>
            <encoder>
                <pattern>${LAYOUT}</pattern>
            </encoder>
        </appender>

        <appender name="FILE" class="ch.qos.logback.core.FileAppender">
            <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
                <evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator">
                    <expression>
                        e.level.toInt() >= WARN.toInt() ||
                        (e.level.toInt() >= TRACE.toInt() &amp;&amp; e.getLoggerName().startsWith("my.package"))
                    </expression>
                </evaluator>
                <OnMatch>ACCEPT</OnMatch>
                <OnMismatch>DENY</OnMismatch>
            </filter>
            <encoder>
                <pattern>${LAYOUT}</pattern>
            </encoder>
            <File>target/log/test-log</File>
            <append>false</append>
        </appender>
    </root>
</configuration>

Ich kann nicht glauben, dass dieses so einfache usecase nicht standardmäßig unterstützt wird.

0
Joan