2009-08-06 33 views
5

Tôi có một ứng dụng PSVM kế thừa mà tôi muốn chuyển hướng đầu ra ghi nhật ký của mình sang các tệp duy nhất trên mỗi lần thực thi. Vì vậy, nếu tôi gọi nó lúc 10:00, sau đó có nó chuyển hướng đầu ra của nó để {thread-id} -10: 00.log; và một luồng thực thi khác có thể bắt đầu thực hiện lúc 10:01 và đầu ra của nó sẽ đi tới {thread-id} -10: 01.log. Tôi hiểu rằng đây không phải là thanh lịch.tạo động và hủy các ứng dụng ghi nhật ký

Câu hỏi của tôi là:

  • có thể như vậy?
  • có ai đó có ý tưởng về cách tiếp cận không?
  • là nó có thể phát hành/phá hủy một appender khi nó không còn cần thiết?

Cảm ơn!

Trả lời

4

Tôi sẽ bắt đầu với FileAppender và lấy được từ đó để tạo của riêng bạn. Chỉ cần sửa đổi phiên bản của bạn để lấy id luồng hiện tại và nối thêm một chuỗi-id/dấu thời gian phù hợp vào tệp trước khi tạo. Bạn sẽ duy trì (nói) một bản đồ (đệm) FileWriters được khóa trên id luồng.

Trình viết bài viết khá tầm thường - here's a Javaworld guide về cách thực hiện.

Ở trên, có khả năng là chương trình của bạn sẽ khởi động hai lần trong một phút? Bạn có muốn chắp thêm một id quá trình hoặc tương tự để duy trì tính duy nhất không?

+0

cảm ơn câu trả lời nhanh! nó không phải là trường hợp cho một thread để làm điều đó nhiều hơn một lần. Nhưng, trong mọi trường hợp, đây chỉ là một ví dụ cho các mục đích thảo luận. tên sẽ được đặt cho sự độc đáo. Bất kỳ ý tưởng nào về cách phát hành trình ghi tệp? –

+0

+1 Liên kết hướng dẫn tốt – WolfmanDragon

+0

Re. phát hành. Tôi nghĩ rằng bạn nên tuôn ra các nhà văn sau mỗi thông điệp tường trình (để đảm bảo ghi vào đĩa), và đừng lo lắng về việc phát hành nó. Hãy để JVM mất mọi thứ. Trừ khi bạn đang viết rất nhiều chủ đề và có rất nhiều tập tin mở. Sau đó, bạn có thể chỉ muốn giữ các nhà văn 'n' mở cùng một lúc và đóng một số khi không đăng nhập. Điều đó có thể dẫn đến một số đập, tuy nhiên :-) –

1

Không thể, ít nhất không dễ thực hiện trong log4j. Tuy nhiên, nếu bạn nhìn vào SiftingAppender vận chuyển với logback (người kế nhiệm của log4j), nó được thiết kế để xử lý việc tạo các appenders trên các tiêu chuẩn thời gian chạy cũng như việc loại bỏ chúng khi không còn cần thiết nữa.

Nếu ứng dụng của bạn chỉ cần tạo một tệp nhật ký cho mỗi lần khởi chạy ứng dụng, bạn có thể chỉ cần đặt tên tệp nhật ký của mình dựa trên dấu thời gian. Hét lên danh sách gửi thư của người dùng logback nếu bạn cần hỗ trợ thêm.

+0

Tôi tò mò muốn biết thêm về lý do tại sao điều này là không thể. Nó có vẻ tương đối đơn giản. Tôi đã theo dõi với một bài đăng cho người dùng logback. Tôi hy vọng bạn có thể tìm thấy nó ở đó và xây dựng. Cảm ơn! –

+0

Nó phụ thuộc vào việc bạn muốn cấu hình appender tùy chỉnh theo lập trình hoặc thông qua một tập tin cấu hình. Ngoài ra còn có câu hỏi về quản lý các tệp nhật ký (mỗi tệp một luồng) trong một ứng dụng đa luồng. Câu hỏi ban đầu không cụ thể về hai vấn đề đó. – Ceki

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