Tôi đã xem một số ứng dụng khác và dường như có tùy chọn postrotate
và copytruncate
option. Các tùy chọn copytruncate là dễ dàng hơn nhưng tôi nghĩ rằng nó là ít đáng tin cậy như bộ đệm có thể không được flushed (tức là làm theo @Jarek Potuik câu trả lời) và thậm chí nếu họ là bạn có thể nhận được mục trùng lặp hoặc bỏ mục.
Như vậy cho phép giả sử bạn muốn postrotate
tùy chọn:
Tùy chọn postrotate
cho phép bạn chạy một lệnh để nói với ứng dụng của bạn để mở lại file (gần và sau đó mở). Trong khi mở và đóng tập tin trong Java, bạn sẽ làm điều này với một khối đồng bộ hoặc một số loại khóa và tất nhiên tuôn ra bất kỳ bộ đệm.
Cho phép giả định ứng dụng của bạn được gọi là myapp
:
Bạn sẽ có một tập tin trong /etc/logrotate.d/myapp
với một cái gì đó như:
/var/log/myapp/*.log {
weekly
missingok
rotate 20
compress
delaycompress
notifempty
sharedscripts
postrotate
/etc/init.d/myapp rotate-logs > /dev/null
endscript
}
Lệnh /etc/init.d/myapp rotate-logs
sẽ cần để ra hiệu cho các ứng dụng để đóng và mở lại nhật ký các tập tin.
Phần báo hiệu khá phức tạp và phụ thuộc vào loại ứng dụng bạn có vì Java không hỗ trợ IPC tốt (tức là tín hiệu unix) để bạn có thể phải mở cổng hoặc sử dụng cổng hiện có chẳng hạn như 8080 (tức là lệnh HTTP REST trong trường hợp thùng chứa servlet) để cho ứng dụng của bạn đóng và mở lại các tệp nhật ký.
Nguồn
2017-01-31 17:03:41