2010-06-24 42 views

Trả lời

6

Bạn có thể thử sử dụng một tùy chỉnh Log4J appender, trong đó có thread id như một tham số và lọc thông điệp dựa trên những gì chủ đề gọi nó. Tạo nó trên bay, đính kèm nó vào logger.

Có nhiều vấn đề với cách tiếp cận này mặc dù:

  1. Quá nhiều appenders sẽ làm chậm khai thác gỗ
  2. AppServers thường có một hồ bơi thread. Điều đó có nghĩa rằng cùng một luồng theo thời gian sẽ tham gia vào việc thực hiện các yêu cầu hoàn toàn không liên quan, mà sẽ kết thúc trong cùng một tệp nhật ký.

Tôi đề nghị bạn xem xét một cách tiếp cận đơn giản hơn: đăng nhập id chủ đề vào cùng một tệp nhật ký. Thật nhanh chóng và đơn giản, log4j có một lá cờ% để thực hiện nó. Sau đó bạn có thể grep/chia nhỏ tệp nhật ký trên mỗi id chủ đề nếu cần.

Cập nhật:

Trên thực tế, bạn có thể có một appender tùy chỉnh duy nhất, mà sẽ mở file log theo yêu cầu khi một chủ đề mới ghi một kỷ lục (appender được thực hiện trong phạm vi mà bối cảnh chủ đề, chỉ cần gọi Ðề tài. currentThread(). getName()). Nhưng bạn sẽ phải thực hiện lại tất cả các tác vụ tệp nhật ký thông thường (xoay vòng) hoặc ủy quyền nó cho người dùng chuẩn cho mỗi tệp.

+0

Xem http://stackoverflow.com/questions/8226615/how-to-use-log4j-in-multithread-using-java – Benj

4

Tôi có một ứng dụng đa luồng để nhận biết mỗi thread trong file log (dunno về các tập tin mutliple, tập tin duy nhất cho tôi thấy tương tranh), xác định các chủ đề được thực hiện tự động bởi khung đăng nhập, nó Log4J

Chỉnh sửa: Không có gì cần phải được thêm vào trong mã, bạn chỉ cần cấu hình appender trong logger để bao gồm [% chủ đề] mà sẽ xác định các chủ đề mà từ đó bạn đang đăng nhập thông điệp hiện nay, đây là ví dụ là từ log4net:

<appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender" > 
<layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
</layout> 

Dưới đây là danh sách các khác thường Java logging frameworks

+0

tất nhiên chúng ta đều biết log4j, nhưng nếu bạn nói nó có thể, bạn có thể vui lòng chỉ cho chúng tôi thực hiện đơn giản để làm điều đó bằng cách sử dụng log4j. – mabuzer

0

Trong một số trường hợp, việc biết số nhận dạng chuỗi ít quan trọng hơn việc biết ngữ cảnh thực thi. Điều này đặc biệt đúng với nhiều chủ đề và ứng dụng lớn hơn. Bạn làm gì khi thay đổi ID luồng, nhưng ngữ cảnh thực thi thực tế là giống nhau (như ai đó đã đề cập với các nhóm luồng) ?. Tôi muốn sử dụng MDC (mapped diagnostic context) để theo dõi ngữ cảnh thực thi trong nhật ký. Nó tốt hơn vì bạn kiểm soát ngữ cảnh là gì. Cuối cùng, bạn có thể thiết lập bố trí các bản ghi để bao gồm MDC và sau đó dễ dàng lọc ra những gì có liên quan. Kiểm tra this tool, nó thực hiện khá nhiều thứ với MDC.

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