2011-11-23 55 views
20

Tôi có câu hỏi về cấu hình ghi nhật ký jdk. Tôi có một EJB (được triển khai thành glassfish) sử dụng JDK Logging để xuất các thông báo. Therefor tôi sử dụng một logger tên với một mã như thế này:Ghi nhật ký Java - cách chuyển hướng đầu ra sang tệp nhật ký tùy chỉnh cho trình ghi nhật ký?

private static Logger logger = Logger.getLogger("org.imixs.workflow"); 
..... 
     logger.fine(" some info..."); 
.... 

tôi biết rằng tôi có thể cấu hình LogLevel cho logger của tôi bằng cách thêm dòng sau vào logging.properties File từ Glassfish:

..... 
org.imixs.workflow.level=FINE 

Nhưng làm cách nào tôi có thể chỉ định tệp đầu ra cho trình ghi nhật ký của mình? Tôi muốn đặt tất cả thư từ trình ghi có tên 'org.imixs.workflow' vào một tệp riêng biệt. Điều này có thể không?

Cảm ơn bạn đã giúp đỡ

Trả lời

28

hơi bối rối sở hữu mô hình của FileHandler thể được sử dụng cho điều này

handlers=java.util.logging.FileHandler 
# Default global logging level. 
.level=INFO 

#logging level for the foo.bar package 
foo.bar.level=CONFIG 
java.util.logging.FileHandler.pattern=%h/java%u.log 

Một mô hình bao gồm một chuỗi bao gồm các thành phần đặc biệt sau đó sẽ được thay thế trong thời gian chạy:

"/" các tên đường dẫn địa phương tách

"% t" hệ thống thư mục tạm thời

"% h" giá trị của "user.home" hệ thống prop erty

"% g" số thế hệ này sang phân biệt các bản ghi xoay

"% u" một số duy nhất để giải quyết xung đột

"%%" dịch để một dấu phần trăm đơn "%"

Nếu bạn muốn đăng nhập vào nhiều file thì bạn có thể làm điều đó bằng cách thiết lập nhiều bộ xử lý cho nhiều tên logger

#FileHandler for file1  
java.util.logging.FileHandler.pattern = logging_property_test.log 
java.util.logging.FileHandler.limit = 50000 
java.util.logging.FileHandler.count = 1 
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter 

#FileHandler for file2 
logging.FileHandler2.pattern = logging_property_test2.log 
logging.FileHandler2.limit = 50000 
FileHandler.count = 1 
logging.FileHandler2.formatter = java.util.logging.SimpleFormatter 


#setting handler for logger1 
logging.PropertyTestingLogger.handlers=java.util.logging.FileHandler 

#setting handler for logger2 
logging.PropertyTestingLogger2.handlers=logging.FileHandler2 

như bạn có thể thấy các trick là có một logging.FileHandler2 đó là một lớp tùy chỉnh và không làm gì nhưng mở rộng FileHandler

package logging; 

import java.io.IOException; 
import java.util.logging.FileHandler; 

public class FileHandler2 extends FileHandler { 

    public FileHandler2() throws IOException, SecurityException { 
     super(); 
    } 

} 

nền: tiếc là người sáng tạo của Java đã không mong đợi bất cứ ai đăng nhập vào nhiều tập tin. Nếu bạn nhìn vào nguồn gốc của java.util.logging.FileHandler bạn sẽ tìm thấy, đó là tài sản mẫu được nạp bởi tên lớp:

public class FileHandler extends StreamHandler { 

    private String pattern; 

    private void configure() { 

     String cname = getClass().getName(); 
     pattern = manager.getStringProperty(cname + ".pattern", "%h/java%u.log"); 
+0

Nhưng làm cách nào tôi có thể sử dụng các mẫu này để xác định rằng nó chỉ ảnh hưởng đến trình ghi nhật ký có tên của tôi (org.imixs.workflow)? Tôi không muốn chuyển hướng các thông điệp máy chủ chung vào tệp nhật ký cụ thể của ứng dụng của mình. – Ralph

+0

Tôi đã cập nhật bài đăng của mình cho phù hợp. Trong ví dụ, mức nhật ký mặc định được đặt thành thông tin, nhưng gói foo.bar để cấu hình –

+0

có - nhưng câu hỏi của tôi là: có thể đặt một tệp đầu ra riêng cho trình ghi nhật ký 'foo.bar' hay không. Tôi biết rằng bạn có thể chỉ định cấp nhật ký riêng cho từng gói. Nhưng làm cách nào để xác định các tệp nhật ký riêng biệt? – Ralph

10

Bạn nên sử dụng FileHandler.

FileHandler fileHandler = new FileHandler("myLogFile"); 
logger.addHandler(fileHandler); 

Xem Example Depot để biết một số ví dụ rõ ràng về cấu hình nhật ký.

Và bạn có thể tìm thấy these answers hữu ích, để đặt từ tệp thuộc tính.

+3

nhưng cũng có thể thực hiện điều này thông qua tệp cấu hình - để tôi không cần chỉ định tên tệp được mã hóa cứng cho tệp nhật ký trong mã nguồn của mình không? – Ralph

3

Với java.util.logging, nó KHÔNG PHẢI LÀ có thể chỉ đơn giản bằng cách sửa đổi tệp cấu hình.Thật không may, bạn phải mở rộng FileHandler và cấu hình trình xử lý đó để lọc những gì bạn muốn đăng nhập.

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