11

Bối cảnh:log4j fileappender không chuyển sang các tập tin mới khi logrotate xoay log file

Tôi muốn sử dụng log4j để viết nhật ký kiểm toán có liên quan đến một tập tin đăng nhập cụ thể, chúng ta hãy nói audit.log. Tôi không muốn sử dụng syslogappender (udp dựa) vì tôi không muốn chịu đựng mất dữ liệu. Ngoài ra, tôi đang sử dụng logrotate để xoay audit.log khi tệp được kích thước nhất định.

Vấn đề:

Tôi đang gặp phải là, khi logrotate xoay file audit.log để audit.log.1, log4j tục bằng văn bản cho audit.log.1 khác ngoài văn bản cho audit.log .

cách tiếp cận có thể xảy ra:

  1. Tôi biết tôi có thể sử dụng RollingFileAppender để làm xoay log khác hơn là sử dụng logrotate, vì vậy khi RollingFileAppender cuộn các tập tin, nó chuyển sang tập tin mới mà không phức tạp. Nhưng lý do tôi không thể sử dụng rollingfileappender là tôi muốn sử dụng tính năng xoay bài đăng của logrotate để kích hoạt một số tập lệnh sau khi quá trình quay xảy ra mà không thể được cung cấp bởi rollingfileappender.

  2. Một cách tuyệt vọng khác mà tôi có thể nghĩ là viết một appender tùy biến log4j để đóng tệp nhật ký (audit.log.1) và mở tệp nhật ký (audit.log) khi phát hiện tệp được xoay.

  3. Tôi chưa bao giờ sử dụng ExternallyRolledFileAppender, nhưng nếu có thể sử dụng logrotate post rotate để gửi tín hiệu tới ExternallyRolledFileAppender và làm cho log4j biết tệp được xoay và bắt đầu ghi vào tệp mới?

Câu hỏi:

Chỉ cần tự hỏi là có một số appender như thế đã được phát minh/văn bản? hoặc tôi có các tùy chọn khác để giải quyết vấn đề này không?

+0

Perfect cách hỏi một câu hỏi 1 – Deepak

Trả lời

5

Check-out copytruncate tùy chọn logrotate 's, nó có thể giúp trường hợp của bạn:

copytruncate 
     Truncate the original log file to zero size in place 
     after creating a copy, instead of moving the old log 
     file and optionally creating a new one. It can be 
     used when some program cannot be told to close its 
     logfile and thus might continue writing (appending) to 
     the previous log file forever. Note that there is a 
     very small time slice between copying the file and 
     truncating it, so some logging data might be lost. 
     When this option is used, the create option will have 
     no effect, as the old log file stays in place 
+0

Đối với một số lý do, tôi không thể sử dụng copytruncate trong trường hợp của tôi. Nếu tôi giải thích điều đó cho bạn, tôi sẽ mất nửa giờ để viết nó :) vì vậy tôi có những lựa chọn nào khác không? – Shengjie

+1

cảm thấy tự do để mất nửa giờ ... :) @Shengjie – rogerdpack

+1

Có lẽ đó là sự phù hợp gần nhất, nhưng nó không giải quyết được vấn đề, như bởi copytruncate logdata có thể bị mất. Có thực sự không có cách nào để nói với một ứng dụng log4j để mở lại xử lý logfile của nó? –