Ich habe kürzlich mit logback experimentiert und habe Beispiele direkt aus Eclipse heraus ausgeführt. Wenn ich das mache, merke ich, dass - selbst nachdem meine statische main(String[] args)
-Methode (innerhalb meiner Java-Treiberklasse) beendet ist, die Anwendung weiter läuft.Stoppen des Logback-Systems für sauberes Herunterfahren
Ich habe schließlich festgestellt, dass Logback seine eigenen Threads verwaltet, die am Leben bleiben, auch nachdem meine Hauptanwendung beendet. Ich googeln für einige Lösungen um und fand dies als eine Möglichkeit explizit heruntergefahren Logback von innen Java:
ILoggerFactory factory = LoggerFactory.getILoggerFactory();
if(factory instanceof LoggerContext) {
LoggerContext ctx = (LoggerContext)factory;
ctx.stop();
}
Ist das wirklich der einzige Weg logback sauber herunterzufahren? Ich habe noch nie ein Protokollierungssystem (JUL, JCL, log4j usw.) gefunden, das Sie explizit zum Beenden Ihrer Anwendung herunterfahren lässt ...
Vielen Dank im Voraus!
aktualisieren: hier ist logback.xml
:
<configuration debug="true" scan="true" scanPeriod="5 minutes">
<appender name="logManager-consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>TRACE</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>NEUTRAL</onMismatch>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="logManager-smtpAppender" class="ch.qos.logback.classic.net.SMTPAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>NEUTRAL</onMismatch>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<smtpHost>my.smtp.host</smtpHost>
<to>[email protected]</to>
<from>[email protected]</from>
<username>my_user</username>
<password>my_password</password>
<subject>%logger{20} - %m</subject>
<layout class="ch.qos.logback.classic.html.HTMLLayout"/>
<cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
<bufferSize>5</bufferSize>
</cyclicBufferTracker>
</appender>
<root level="ALL">
<appender-ref ref="logManager-consoleAppender" />
<appender-ref ref="logManager-smtpAppender" />
</root>
</configuration>
Mit logback-1.0.13 und JDK 1.6u34.
Wie sieht Ihre logback.xml-Datei aus? Welche Version von Logback verwenden Sie? Welches JDK? – Ceki
Dank @Ceki (+1) - bitte sehen Sie meine Updates für Antworten auf alle Ihre Fragen. – IAmYourFaja
Setzen Sie smtpAsynchronousSending in SMTPAppender auf false und sehen Sie, ob es einen Unterschied macht: http://logback.qos.ch/manual/appenders.html#smtpAsynchronousSending – Ceki