Ho sperimentato recentemente con logback e ho eseguito esempi direttamente da Eclipse. Quando faccio questo, noto che, anche dopo che il mio metodo statico main(String[] args)
termina (dall'interno della mia classe di driver Java), l'applicazione continua a funzionare.Arresto del sistema di logback per l'arresto pulito
Alla fine ho appurato che Logback sta gestendo i propri thread che rimangono in vita anche dopo la chiusura dell'applicazione principale. Ho cercato su google in giro per alcune soluzioni e ho trovato questo come un modo di spegnere esplicitamente Logback dall'interno Java:
ILoggerFactory factory = LoggerFactory.getILoggerFactory();
if(factory instanceof LoggerContext) {
LoggerContext ctx = (LoggerContext)factory;
ctx.stop();
}
è davvero questo l'unico modo di spegnere logback modo pulito? Non ho mai incontrato un sistema di registrazione (JUL, JCL, log4j, ecc.) Che ti fa spegnere esplicitamente per uscire con grazia dall'applicazione ...
Grazie in anticipo!
Aggiornamento: qui è 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>
Utilizzando logback-1.0.13 e JDK 1.6u34.
Che aspetto ha il file logback.xml? Quale versione di logback stai usando? Quale JDK? – Ceki
Grazie a @Ceki (+1) - si prega di consultare i miei aggiornamenti per le risposte a tutte le vostre domande. – IAmYourFaja
Imposta smtpAsynchronousSending in SMTPAppender su false e controlla se fa la differenza: http://logback.qos.ch/manual/appenders.html#smtpAsynchronousSending – Ceki