2013-05-28 8 views
10

最近私はlogbackを実験していて、Eclipseの中から直接サンプルを実行しています。私がこれを行うと、私の静的なmain(String[] args)メソッドが終了しても(私のJavaドライバクラスの中から)、アプリケーションは実行を続けます。クリーンシャットダウンのためのLogbackシステムの停止

Logbackは、主なアプリケーションが終了しても自分のスレッドを管理していることを最終的に確かめました。私はいくつかの解決策の周りGoogleで検索して明示的にJavaの内部からLogbackをシャットダウンする方法として、これを見つけた:

ILoggerFactory factory = LoggerFactory.getILoggerFactory(); 
if(factory instanceof LoggerContext) { 
    LoggerContext ctx = (LoggerContext)factory; 
    ctx.stop(); 
} 

は、これは本当にきれいlogbackをシャットダウンする唯一の方法ですか?私はアプリケーションを正常に終了させるために明示的にシャットダウンするログシステム(JUL、JCL、log4jなど)に遭遇したことはありません。

ありがとうございます!

更新は:ここにlogback.xml次のとおりです。logback-1.0.13およびJDK 1.6u34を使用して

<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> 

+1

logback.xmlファイルの外観は?どのバージョンのログバックを使用していますか?どのJDK? – Ceki

+0

@Ceki(+1)ありがとうございました。あなたのすべての質問に対する回答は、私のアップデートをご覧ください。 – IAmYourFaja

+1

SMTPAppenderのsmtpAsynchronousSendingをfalseに設定し、違いがあるかどうかを確認します。http://logback.qos.ch/manual/appenders.html#smtpAsynchronousSending – Ceki

答えて

7

問題はおそらくログバックのバグが原因です。 SMTPAppenderでasynchronousSendingをtrueに設定すると、バグを回避します(実際に修正することはありません)。問題を説明するa new issue in our jiraを追加しました。

+0

あなたは、asynchronousSendingをfalseに設定すると思います!元の投稿のあなたのコメントにあなたが書いたように。 –

関連する問題