Tôi làm việc trong một dự án sử dụng Log4J. Một trong những yêu cầu là tạo một tệp nhật ký riêng biệt cho mỗi luồng; bản thân vấn đề này là một vấn đề kỳ lạ, được sắp xếp một phần bằng cách tạo một FileAppender mới trên bay và đính kèm nó vào cá thể Logger.Log4J - Chức năng SiftingAppender giống như
Logger logger = Logger.getLogger(<thread dependent string>);
FileAppender appender = new FileAppender();
appender.setFile(fileName);
appender.setLayout(new PatternLayout(lp.getPattern()));
appender.setName(<thread dependent string>);
appender.setThreshold(Level.DEBUG);
appender.activateOptions();
logger.addAppender(appender);
Tất cả mọi thứ diễn ra tốt đẹp cho đến khi chúng ta nhận ra rằng một thư viện chúng tôi sử dụng - Spring Framework v3.0.0 (mà sử dụng Commons Logging) - không chơi bóng với các kỹ thuật nói trên - các dữ liệu Xuân khai thác gỗ được “nhìn thấy” chỉ bởi appenders khởi từ tệp log4.configuration nhưng không phải do trình tạo thời gian chạy đã tạo. Vì vậy, hãy quay lại hình vuông.
Sau khi điều tra, tôi phát hiện ra rằng LogBack mới và được cải tiến có một appender - SiftingAppender - thực hiện chính xác những gì chúng tôi cần, tức là ghi nhật ký cấp luồng trên các tệp độc lập.
Hiện tại, việc chuyển sang LogBack không phải là một tùy chọn, vì vậy, bị mắc kẹt với Log4J, làm thế nào tôi có thể đạt được chức năng giống như SiftingAppender và giữ cho Spring luôn vui vẻ?
Lưu ý: Mùa xuân chỉ được sử dụng cho chức năng JdbcTemplate, không có IOC; để “móc” Commons Spring Logging để Log4J tôi đã thêm dòng này trong file log4j.properties:
log4j.logger.org.springframework = DEBUG
theo hướng dẫn here.
Nếu bạn chỉ sử dụng chức năng Spring cho jdbc, thì bạn có thể muốn xem xét sử dụng một cái gì đó như apache commons-dbutils thay thế. –