Ich habe meine logback.xml definiert als:Logback mehrere Logger nicht eben zu Ehren
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<jmxConfigurator />
<appender name="ROOT_FILE_APPENDER"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<fieldNames>
<timestamp>timestamp</timestamp>
<version>[ignore]</version>
<levelValue>[ignore]</levelValue>
</fieldNames>
</encoder>
<file>root.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>root.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>$100MB</maxFileSize>
<totalSizeCap>1GB</totalSizeCap>
<maxHistory>7</maxHistory>
</rollingPolicy>
</appender>
<appender name="basic-text" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>%X{Logging-CorrelationId} %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<file>text.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>text.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<totalSizeCap>1GB</totalSizeCap>
<maxHistory>7</maxHistory>
</rollingPolicy>
</appender>
<root level="ERROR">
<appender-ref ref="ROOT_FILE_APPENDER" />
</root>
<logger name="it.pkg.testpkg.service" additivity="true" level="INFO">
<appender-ref ref="basic-text"/>
</logger>
</configuration>
Bitte beachten Sie, dass die „root“ Logger Ebene wurde auf „ERROR“ gesetzt und der andere Logger Ebene gesetzt wurde zu "INFO" mit Additivität = wahr.
Meine Java-Klasse hat Code, der wie folgt aussieht: Jetzt
private static final Logger LOGGER = LoggerFactory.getLogger(it.pkg.testpkg.service.EchoService.class);
, das Problem ist, wenn ich eine Protokollierung als:
LOGGER.info("Test Log");
Der Protokolleintrag geht sowohl in den Log-Dateien, obwohl die Root-Logger-Ebene auf "ERROR" gesetzt wurde. In dem Moment, in dem ich den "it.pkg.testpkg.service" -Logger loslasse (indem ich ihn ausnotiere oder lösche), hört der Eintrag auf, in den Root-Logger zu gehen. Ich bin mir nicht sicher, was hier vor sich geht.
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
aber ich will nicht meine appender werden gebunden mit einem bestimmten Protokollebene:
Vorerst habe ich eine vorübergehende Lösung durch Zugabe von unter Eintrag in „ROOT_FILE_APPENDER“ gefunden. Ist das ein Fehler bei Logback oder mache ich hier etwas falsch?
Ich verwende unter pom Abhängigkeiten:
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
Jede mögliche Hilfe würde geschätzt.
Danke.
Unser Ziel hinzuzufügen ist, dass nur Fehler Ebene protokolliert root-Logger erreichen. Idealerweise sollte Logger immer die ihm zugewiesene Ebene berücksichtigen. Was ist der Zweck dieses Verhaltens? – Shailesh
_Logger sollte immer die ihm zugewiesene Ebene berücksichtigen_ Sie melden sich nicht beim Root-Logger an. Sie loggen sich in den 'it.pkg.testpkg.service'-Logger ein und erben dessen Appender. Das ist der Zweck der "Additivität". –