2011-07-06 13 views
8

Tôi đang sử dụng slf4j + logback để đăng nhập vào ứng dụng của chúng tôi. Trước đó chúng tôi đã sử dụng jcl + log4j và di chuyển gần đây.Làm thế nào để xử lý các lỗi đầy đủ của đĩa trong khi đăng nhập vào lobgack?

Do số lượng đăng nhập cao trong ứng dụng của chúng tôi, có khả năng ổ đĩa đầy trong môi trường sản xuất. Trong những trường hợp như vậy, chúng ta cần ngừng ghi nhật ký và ứng dụng sẽ hoạt động tốt. Những gì tôi tìm thấy từ trang web là chúng tôi cần bình chọn đăng nhập StatusManager cho các lỗi như vậy. Nhưng điều này sẽ thêm một phụ thuộc với logback cho ứng dụng. Đối với log4j, tôi thấy rằng chúng ta có thể tạo một Appender dừng việc đăng nhập trong các tình huống như vậy. Điều đó một lần nữa sẽ gây ra một sự phụ thuộc ứng dụng với log4j.

Có cách nào để định cấu hình điều này chỉ với slf4j hoặc có cơ chế nào khác để xử lý việc này không?

+0

Tôi tò mò, điều gì sẽ xảy ra khi đĩa đầy? Làm ngoại lệ bong bóng lên từ slf4j/logback? Tôi đã nghĩ rằng các thư viện đăng nhập sẽ không ném bất kỳ ngoại lệ nào cho bạn. –

Trả lời

7

Bạn không phải làm hoặc định cấu hình bất kỳ điều gì. Logback được thiết kế để xử lý tình huống này khá độc đáo. Khi đĩa đích đã đầy, thì FileAppender của logback sẽ ngừng ghi vào một khoảng thời gian ngắn nhất định. Khi sự chậm trễ đó trôi qua, nó sẽ cố gắng phục hồi. Nếu nỗ lực phục hồi không thành công, thời gian chờ sẽ tăng dần lên đến tối đa là 1 giờ. Nếu nỗ lực khôi phục thành công, FileAppender sẽ bắt đầu đăng nhập lại.

Quy trình hoàn toàn tự động và mở rộng liên tục thành RollingFileAppender. Xem thêm graceful recovery.

Trên ghi chú cá nhân hơn, khôi phục duyên dáng là một trong những tính năng đăng nhập ưa thích của tôi.

+0

Sự kiện sẽ được lưu vào bộ đệm hoặc những sự kiện đã xảy ra trong khi đĩa đã đầy, bị mất? –

+1

Sự kiện được tạo trong khi lỗi IO không được đệm. – Ceki

+1

Sẽ có thông báo trong nhật ký ghi lại sự kiện đã bị xóa không? –

0

Bạn có thể thử mở rộng lớp slf4j.Logger, cụ thể là thông tin, gỡ lỗi, theo dõi và các phương thức khác và truy vấn không gian khả dụng theo cách thủ công (qua File.getUsableSpace()) trước mỗi cuộc gọi.

Bằng cách đó bạn sẽ không cần bất kỳ sự phụ thuộc ứng dụng nào

+0

File.getUsableSpace() sẽ cần vị trí tệp nhật ký, có thể thay đổi theo triển khai. – Girish

0

2 lựa chọn thực:

  • thêm một nhiệm vụ cron trên linux (hoặc lên kế hoạch một trên cửa sổ) để dọn dẹp mớ hỗn độn của bạn (bao gồm cả một số gzip, nếu cần thiết.).
  • mua một đĩa cứng lớn hơn và tự thực hiện việc duy trì

  • + logging -Giảm

đĩa đầy đủ là như oom, bạn không thể biết những gì thất bại 1 khi bắt nó. Xử lý w/ra khỏi bộ nhớ (hoặc đĩa) là bằng cách ngăn chặn nó. Có thể có nhiều trường hợp khi cần thêm dung lượng đĩa và nhiệm vụ không thành công.