Ich bin irgendwie neu in Logging, und ich habe ein Projekt gestartet, für das ich Logback gewählt habe.SLF4J und Logback: Logger auf autowired Dienste propagieren
Ich habe folgende logback.xml
Konfiguration
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="BARLOGGER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME:-/repository/logs}/bar.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME:-/repository/logs}/bar.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="BOOLOGGER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME:-/repository/logs}/boo.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME:-/repository/logs}/boo.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.foo.bar" level="debug" additivity="false">
<appender-ref ref="BARLOGGER" />
</logger>
<logger name="com.foo.boo" level="debug" additivity="false">
<appender-ref ref="BOOLOGGER" />
</logger>
<root level="error">
<appender-ref ref="STDOUT" />
</root>
</configuration>
I 2 Services haben (Boo
und Bar
), in zwei verschiedenen Paketen. Ich habe einen Appender für jeden von ihnen konfiguriert, und die Protokollierung für diese Dienste funktioniert gut.
Dies ist das Problem, mit dem ich konfrontiert bin.
Beide Dienste (Boo
und Bar
) eine autowired Abhängigkeit eines dritten Service (Tee
), für die es keine appender definiert. Der Tee
Service ist auf com.foo.tee
Ich möchte nicht ein eindeutiges Protokoll für die 3 Dienste haben, da sie verschiedene Dinge tun und zu unterschiedlichen Zeiten ausgeführt werden.
Gibt es eine Möglichkeit, Tee
Dienstprotokollierung zu Boo oder Bar Appenders, je nachdem, welcher Dienst (Boo
/Bar
) diesen Dienst genannt?
Im Grunde, was ich erreichen will ist
- Bar hat eine T-Abhängigkeit. Wenn Bar eine T-Methode aufruft, sollte die Protokollierung dieser Methode nur in Bar-Logger geschrieben werden.
- Boo hat auch eine T-Abhängigkeit. Wenn Boo, der ein T-Methode aufruft, sollte diese Methode der Protokollierung geschrieben werden Logger Boo nur
- Bar und Boo Protokolle schreiben, um verschiedene Dateien und Protokollierung Tee sollte nur auf seine „Invocator“ angehängt werden log
Ich möchte, dass dies Kontext für die Operation hat, die ausgeführt wird, da es eine dritte Protokolldatei für T-Stück erschwert, zu verfolgen, woher ein Anruf kam.
Danke!
PS: Ich habe versucht, eine vorherige Antwort darauf zu finden, aber ich weiß nicht, ob ich mit den falschen Schlüsselwörtern suchte oder ob das nicht erreicht werden kann.
nicht wirklich sicher, was los ist, aber wenn Sie Lombok zu Ihrem Projekt installieren, alles, was Sie tun müssen, um Logger zu bekommen, ist Annotate-Klasse mit @ Slf4j. Schaut hinein, viel Glück. – Sarief
@Sarief ein bisschen Overkill, da es nur eine einzige Zeile ersetzt 'private final Loggerlog = LoggerFactory.getLogger (getClass())' – OrangeDog
@OrangeDog vielleicht, aber für mich war es wie: installieren und verwenden. auch keine Notwendigkeit für diese Linie, wie es meiner Meinung nach Overkill ist: D – Sarief