In meinem Projekt verwende ich Logback als Protokollierungsfunktion. Ich habe folgende KlasseSpring @ PreDestroy: Keine Protokollierung, da Protokollierung zu früh beendet wird
@Component
class Test {
@PreDestroy
public void destroy() {
try {
...
} catch (Exception e) {
LoggerFactory.getLogger(getClass()).error(e.getLocalizedMessage(), e);
}
}
}
Nun dekomprimiere ich das Servlet. Wenn eine Ausnahme auftritt, druckt Logback die Nachricht und die Stapelüberwachung nicht. Dies liegt daran, dass Logback aufgeräumt wird, bevor die von Spring aufgerufen wird. Wenn das Servlet undeploying, ist dies die erste (und letzte) Linie Protokoll:
15:46:19,084 |-INFO in [email protected]7fe56 - About to stop ch.qos.logback.classic.LoggerContext [default]
ich festgestellt, dass Logback stoppt zunächst durch ein System.out.println("...");
im destroy()
hinzufügen.
Gibt es eine Möglichkeit, das zu beheben?
Meine Abhängigkeiten: (welche routet zu logback
)
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>5.0.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>99-empty</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jcl</artifactId>
</dependency>
</dependencies>
Bitte beachten Sie, dass spring-jcl
auf Route commons-logging
-slf4j
verwendet. Ich verwende nicht jcl-over-slf4j
.
Mögliche Duplikat [Spring @PreDestroy Ergebnisse der Anmeldung Anmeldung nicht zufällig] (https://stackoverflow.com/questions/30426533/springs-predestroy-results-in-logging -randomly-not-logging) – niekname
Ich denke, es ist in der Tat das gleiche Problem. Haben Sie eine Idee, wie Sie das automatische Herunterfahren von Logback (LogbackServletContextListener) deaktivieren und Logback so spät wie möglich manuell beenden? Ich bin in einer Tomcat/Spring-Umgebung. –
Auch duplizieren von: https://stackoverflow.com/questions/17400136/how-to-log-within-shutdown-hooks-with-log4j2 Stellen Sie sicher, dass Sie die Antwort des Benutzers 'DjDCH' lesen – niekname