2012-03-09 6 views
7

Tôi sử dụng log4j để ghi nhật ký. Và tôi muốn sửa đổi các phương thức: cảnh báo (..), lỗi (..). Tôi muốn sửa đổi tin nhắn trong phương pháp này. Vì vậy, có cách nào, làm thế nào để tạo logger của riêng tôi?cách tạo MyLogger?

public class MyLogger extends Logger { 

protected MyLogger(String name) { 
    super(name); 
} 

@Override 
public void error(Object message) { 
    message = "test - " + message; 

    super.error(message); 
} 

} 

Và trong cuộc gọi lớp:

private static final Logger logger = MyLogger.getLogger(TestClass.class); 

logger.error("error message"); 

Nhưng nó, không làm việc. Bạn có thể giúp tôi? Cảm ơn.

Trả lời

7

Vấn đề của bạn là:

MyLogger.getLogger(TestClass.class) 

là một phương pháp static mà trả gốc Logger lớp. MyLogger bị bỏ qua. Phương pháp đơn giản nhất là để quấn ban đầu trở Logger lớp theo tinh thần mẫu:

public class MyLogger extends Logger { 
    final Logger target; 
    protected MyLogger(Logger target) { 
     this.target = target; 
    } 

    @Override 
    public void error(Object message) { 
     target.error(message); 
    } 

    //... 

} 

Để sử dụng MyLogger trang trí bạn phải quấn logger gốc với nó:

private static final Logger logger = 
    new MyLogger(Logger.getLogger(TestClass.class)); 

xem xét gói nó trong tùy chỉnh nhà máy.

+3

Tôi nghĩ rằng vấn đề với phương pháp đó là nếu bạn thêm tệp/dòng nơi nhật ký xảy ra với mẫu của bạn ("% l" chẳng hạn), bạn sẽ luôn nhận được "MyLogger" nguồn. – electrotype

+1

Cũng như một tham chiếu: giải pháp này được mô tả tại https://books.google.es/books?id=hZBimlxiyAcC&lpg=PA162&ots=QgJm9Y3WZ9&dq=log4j%20decorator&hl=es&pg=PA163#v=onepage&q=log4j%20decorator&f=false – frb

5

Bạn không bao giờ nên tạo Trình ghi nhật ký của riêng mình. Tôi đã thấy nhiều lý do xấu để tạo ra một, nhưng không bao giờ là một lý do tốt. Nếu bạn muốn thêm một số thông tin theo ngữ cảnh trong các câu lệnh tường trình, bạn có thể sử dụng tính năng NDC/MDC của Log4J.

http://wiki.apache.org/logging-log4j/NDCvsMDC

0

Không sửa đổi logger - một logger là một chỉ là một cách thuận tiện để gửi tin nhắn đăng nhập vào khung đăng nhập. Việc xử lý các tin nhắn xảy ra trong các ứng dụng.

Vì vậy, bạn có hai lựa chọn:

  1. Bạn có thể nói appender chính (được gắn vào logger root), để xử lý các thông báo cho bạn. Nhìn ở đây: LOG4J: Modify logged message using custom appender

  2. Tạo ứng dụng mới đại diện cho người dùng hiện có. Bằng cách đó, bạn có thể đính kèm appender đặc biệt này để chỉ một số logger.

    Chỉ cần triển khai AppenderAttachable<E> trong ứng dụng của bạn. Sau đó, bạn có thể sử dụng <appender-ref .../> trong cấu hình của nó.