2013-06-03 20 views
7

Tôi đang viết CustomLayout để đăng nhập, vì tôi muốn tinh chỉnh tên luồng và tên nhật ký. Tài liệu đăng nhập cho biếtCách in dấu vết ngăn xếp từ bố cục tùy chỉnh logback?

Trong ví dụ trên, phương thức doLayout bỏ qua mọi ngoại lệ cuối cùng có trong sự kiện. Trong triển khai bố cục thế giới thực, bạn có thể muốn in nội dung của các ngoại lệ.

Umm, vâng, tất nhiên tôi muốn in dấu vết ngăn xếp khi triển khai mặc định sẽ. Nhưng tôi không thể tìm thấy bất kỳ hướng dẫn nào để làm như vậy. Tôi đã tải xuống các nguồn và nhìn xung quanh. Công việc sau dường như hoạt động:

/** 
* How much stack to print if there's an exception. 
*/ 
private List<String> stackOptionList = Arrays.asList("full"); 

@Override 
public String doLayout(ILoggingEvent event) { 
    StringBuffer sbuf = new StringBuffer(128); 
    . . . 
    IThrowableProxy proxy = event.getThrowableProxy(); 
    if (proxy != null) {  
    ThrowableProxyConverter converter = new ThrowableProxyConverter(); 
    converter.setOptionList(stackOptionList); 
    converter.start(); 
    sbuf.append(converter.convert(event)); 
    sbuf.append(CoreConstants.LINE_SEPARATOR); 
    } 
    . . . 
    return sbuf.toString(); 
} 

Có cách nào tốt hơn/được chấp thuận hơn không?

Trả lời

5

ThrowableProxyConverter là cách để in dấu vết ngăn xếp. Do đó, mã bạn định sử dụng có vẻ tốt. Tuy nhiên, thay vì viết CustomLayout, bạn có thể điều chỉnh PatternLayout bằng custom converters. Trong phần lớn các trường hợp, đó là tùy chọn dễ dàng hơn/tốt hơn.

+0

Điểm tốt - trình chuyển đổi tùy chỉnh sạch hơn nhiều. Cảm ơn! – vanmelle

+0

@ceki Có nên tạo, bắt đầu và dừng một 'ThrowableProxyConverter' mới cho mỗi doLayout không? – Ittai

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