Trong dự án của tôi, tôi đang sử dụng Logback làm cơ sở ghi nhật ký. Tôi có lớp sauSpring @PreDestroy: Không đăng nhập vì Logback dừng quá sớm
@Component
class Test {
@PreDestroy
public void destroy() {
try {
...
} catch (Exception e) {
LoggerFactory.getLogger(getClass()).error(e.getLocalizedMessage(), e);
}
}
}
Bây giờ, tôi không triển khai servlet. Khi một ngoại lệ xảy ra, Logback không in thông báo và theo dõi ngăn xếp. Điều này là do Logback đang dọn dẹp trước khi destroy()
được gọi là Mùa xuân. Khi undeploying servlet, đây là lần đầu tiên (và cuối cùng) dòng nhật ký:
15:46:19,084 |-INFO in [email protected]7fe56 - About to stop ch.qos.logback.classic.LoggerContext [default]
Tôi xác nhận rằng Logback dừng đầu tiên bằng cách thêm một System.out.println("...");
trong destroy()
.
Có cách nào để sửa lỗi này không?
phụ thuộc của tôi:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>5.0.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>99-empty</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jcl</artifactId>
</dependency>
</dependencies>
Xin lưu ý rằng spring-jcl
được sử dụng để định tuyến commons-logging
-slf4j
(mà sẽ định tuyến để logback
). Tôi không sử dụng jcl-over-slf4j
.
có thể trùng lặp của [Spring kết quả @PreDestroy trong đăng nhập một cách ngẫu nhiên không đăng nhập] (https://stackoverflow.com/questions/30426533/springs-predestroy-results-in-logging -năng-không-đăng nhập) – niekname
Tôi nghĩ đó thực sự là vấn đề tương tự. Bất kỳ ý tưởng làm thế nào để vô hiệu hóa tự động tắt từ Logback (các 'LogbackServletContextListener') và tự tắt máy Logback càng muộn càng tốt? Tôi đang ở trong môi trường Tomcat/Spring. –
Cũng trùng lặp với: https://stackoverflow.com/questions/17400136/how-to-log-within-shutdown-hooks-with-log4j2 Đảm bảo bạn đọc câu trả lời của người dùng 'DjDCH' – niekname