2012-05-10 26 views
5

Tệp cấu hình ghi nhật ký Java cho phép tôi xác định các thuộc tính của trình ghi nhật ký có tên, ví dụ:Cách định cấu hình các thuộc tính của một FileHandler cụ thể

name.heikoseeberger.heikotron.level = FINE 
name.heikoseeberger.heikotron.handlers = java.util.logging.FileHandler 

Cho đến giờ, rất tốt. Bây giờ, tôi muốn định cấu hình cụ thể làFileHandler, ví dụ: với một tệp đầu ra cụ thể. Đáng tiếc là tôi chỉ biết làm thế nào để cấu hình "toàn cầu" FileHandler, đó là đã có trong tập tin cấu hình:

java.util.logging.FileHandler.pattern = %h/java%u.log 
java.util.logging.FileHandler.limit = 50000 
java.util.logging.FileHandler.count = 1 
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter 

Tôi không muốn cấu hình thế này, nhưng trường hợp đó là liên kết với tùy chỉnh của tôi Nhật ký. Tôi đã cố gắng điều sau đây, nhưng không thành công:

name.heikoseeberger.heikotron.java.util.logging.FileHandler.pattern = %h/heikotron.log 
name.heikoseeberger.heikotron.java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter 

Có thể ở tất cả các thiết lập các thuộc tính của cụ FileHandler trường? Nếu có, chúng phải được xác định/đặt tên như thế nào?

Trả lời

0

Tôi không nghĩ là có thể. Nếu bạn xem lại mã nguồn cho FileHandler bạn sẽ sớm xác định rằng nó sử dụng chuỗi "java.util.logging.FileHandler.pattern "để xác định các mô hình của các tập tin để sử dụng cho mục đích khai thác gỗ

private void configure() { 
     LogManager manager = LogManager.getLogManager(); 

     String cname = getClass().getName(); 

     pattern = manager.getStringProperty(cname + ".pattern", "%h/java%u.log"); 
     limit = manager.getIntProperty(cname + ".limit", 0); 
     //... 
    } 

Như vậy, cấu hình mà bạn đang đặt trong tập tin được thậm chí không được đưa vào tài khoản bằng cách Handler.

Nó xuất hiện với tôi rằng xử lý không biết về sự tồn tại của bất kỳ logger cụ thể (ví dụ name.heikoseeberger.heikotro n), họ chỉ biết làm thế nào để xuất bản một LogRecord nhất định.

Theo như tôi thấy, các bộ xử lý của một phần icular logger được tạo ra bởi LogManager, bằng cách gọi một constructor mặc định, như khi một handler đã được tạo ra, nó không biết được logger nào đã được yêu cầu, đó là lý do tại sao tất cả các thuộc tính của chúng được thiết lập thông qua tên lớp và không thông qua tên của người ghi nhật ký.

0

Nếu tôi hiểu đúng, bạn đang cố viết các tệp nhật ký khác nhau bằng gói java.util.logging. Điều này không thể được thực hiện ra khỏi hộp mà không mở rộng nó.

Nếu bạn không thể chuyển sang một khung đăng nhập khác như Logback, hãy kiểm tra câu trả lời tới java util logging.properties: How to log to two different files và xem liệu nó có phù hợp với nhu cầu của bạn hay không.

1

Điều này được thực hiện bằng cách sử dụng tùy chọn config được mô tả trong tài liệu cấp cao nhất của LogManger. Tạo một lớp được đặt tên công khai với một hàm tạo công khai và gọi tất cả các cuộc gọi java mà bạn cần thực hiện để định cấu hình trình xử lý của mình. Sau đó, trong các thuộc tính ghi nhật ký của bạn, hãy trực tiếp LogManager để tải lớp bạn đã tạo để định cấu hình trình xử lý của bạn. Nếu không, bạn có thể để xử lý tập tin lớp con mà sẽ tạo ra một không gian tên tùy chỉnh để cấu hình.

+0

'Thuộc tính' cấu hình ". Thuộc tính này nhằm cho phép chạy mã cấu hình tùy ý. ' Vì vậy, điều này có thể được sử dụng để tải một tập tin cấu hình có lớp để ánh xạ tên tập tin –

Các vấn đề liên quan