Gần đây tôi đã thử nghiệm với logback và đã chạy các ví dụ trực tiếp từ bên trong Eclipse. Khi tôi làm điều này, tôi nhận thấy rằng - ngay cả sau khi kết thúc phương thức tĩnh của tôi main(String[] args)
(từ bên trong lớp trình điều khiển Java của tôi), ứng dụng vẫn tiếp tục chạy.Dừng hệ thống Logback để tắt máy
Cuối cùng tôi đã chắc chắn rằng Logback đang quản lý các chuỗi riêng của mình đang tồn tại ngay cả sau khi thoát khỏi ứng dụng chính của tôi. Tôi googled xung quanh cho một số giải pháp và phát hiện này như một cách để tắt một cách rõ ràng xuống Logback từ bên trong Java:
ILoggerFactory factory = LoggerFactory.getILoggerFactory();
if(factory instanceof LoggerContext) {
LoggerContext ctx = (LoggerContext)factory;
ctx.stop();
}
Đây có phải là thực sự là cách duy nhất tắt logback sạch? Tôi chưa bao giờ gặp phải hệ thống ghi nhật ký (JUL, JCL, log4j, v.v.) khiến bạn tắt nó một cách rõ ràng để thoát khỏi ứng dụng của mình một cách rõ ràng ...
Cảm ơn bạn trước!
Cập nhật: đây là 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>
Sử dụng logback-1.0.13 và JDK 1.6u34.
Tệp logback.xml của bạn trông như thế nào? Bạn đang sử dụng phiên bản logback nào? JDK nào? – Ceki
Cảm ơn @Ceki (+1) - vui lòng xem các cập nhật của tôi cho câu trả lời cho tất cả các câu hỏi của bạn. – IAmYourFaja
Đặt smtpAsynchronousSending in SMTPAppender thành false và xem nó có tạo sự khác biệt không: http://logback.qos.ch/manual/appenders.html#smtpAsynchronousSending – Ceki