2013-05-28 11 views
10

के लिए लॉगबैक सिस्टम को रोकना मैं हाल ही में logback के साथ प्रयोग कर रहा हूं और सीधे ग्रहण के अंदर से उदाहरण चला रहा हूं। जब मैं ऐसा करता हूं, तो मुझे लगता है कि - मेरे स्थिर main(String[] args) विधि समाप्त होने के बाद भी (मेरे जावा ड्राइवर वर्ग के अंदर से), एप्लिकेशन चल रहा रहता है।क्लीन शटडाउन

मैंने अंततः यह पता लगाया कि लॉगबैक अपने मुख्य अनुप्रयोगों के बाहर होने के बावजूद जीवित रहने वाले अपने धागे का प्रबंधन कर रहा है। मैं कुछ समाधान के लिए आसपास googled और स्पष्ट रूप से जावा अंदर से Logback नीचे बंद करने का एक तरीका के रूप में इस पाया:

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

यह वास्तव में logback सफाई से नीचे बंद के लिए एक ही रास्ता है? मुझे कभी भी लॉगिंग सिस्टम (जेयूएल, जेसीएल, लॉग 4 जे इत्यादि) का सामना नहीं हुआ है जो आपको अपने आवेदन से बाहर निकलने के लिए स्पष्ट रूप से बंद कर देता है ...

अग्रिम धन्यवाद!

अद्यतन: यहाँ 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> 

का उपयोग logback-1.0.13 और JDK 1.6u34।

+1

आपकी logback.xml फ़ाइल कैसी दिखती है? आप किस लॉगबैक का उपयोग कर रहे हैं? कौन सा जेडीके? – Ceki

+0

धन्यवाद @Ceki (+1) - कृपया अपने सभी सवालों के जवाब के लिए मेरे अपडेट देखें। – IAmYourFaja

+1

SMTPAsynchronous को SMTPAppender में झूठ बोलने के लिए सेट करें और देखें कि इससे कोई फर्क पड़ता है: http://logback.qos.ch/manual/appenders.html#smtpAsynchronousSending – Ceki

उत्तर

7

समस्या शायद लॉगबैक में एक बग के कारण है। SMTPAppender में सत्य के लिए asynchronousSending सेट करना बग को रोकता है (वास्तव में इसे ठीक किए बिना)। मैंने समस्या का वर्णन करते हुए a new issue in our jira जोड़ा है।

+0

मुझे लगता है कि आपका मतलब है, असीमित सेट करें झूठ बोलना! जैसा कि आपने मूल पोस्ट पर अपनी टिप्पणी में लिखा था। –

संबंधित मुद्दे