2010-02-22 5 views
6

Tôi đang xem xét việc kết nối ứng dụng Java của bên thứ ba với giải pháp phân tích/tổng hợp nhật ký của chúng tôi (có lẽ là Splunk, chúng tôi chưa hoàn tất lựa chọn của mình). Có vẻ như dễ nhất để kết nối tác nhân Splunk với syslog, vì vậy tôi đang tìm cách chuyển hướng các bản ghi ứng dụng tới một daemon syslog cục bộ trên máy chủ.Có trình xử lý java.util.logging mạnh mẽ của syslog không?

Ứng dụng Java sử dụng java.util.logging, thật không may không có tính năng xử lý syslog ra khỏi hộp (tôi tin rằng log4j có, mặc dù). Có thư viện nào đã được chứng minh để làm điều này không? Tải nhật ký không lớn (có thể 10-20 thông điệp mỗi phút từ mỗi quy trình, tối đa 6 quy trình trên mỗi máy chủ) nhưng tôi lo ngại về độ tin cậy và độ bền (ví dụ: điều gì sẽ xảy ra khi daemon bị hỏng? ...).

Bất kỳ trợ giúp sẽ được đánh giá cao ...

Trả lời

8

SLF4J có bridge để thông qua các sự kiện để java.util.logging SLF4J (và do đó để log4j hay logback) mà bạn có thể sử dụng. Nó có một chi phí hiệu suất (xem liên kết) nhưng cho tải của bạn, điều này không phải là một việc lớn. Vì vậy, bạn có thể sử dụng SyslogAppender của Log4J (hoặc tốt hơn người kế nhiệm của nó, logback, cũng có một số SyslogAppender). Tôi không có bất kỳ kinh nghiệm với appender này (vì vậy điều này có thể yêu cầu một số thử nghiệm) nhưng logback chắc chắn là một thư viện đáng tin cậy và tôi biết rằng nó có thể được cấu hình để không in dấu vết ngăn xếp bằng cách sử dụng "nopexception" hoặc "nopex" conversion word (trong trường hợp gửi tin nhắn khi daemon xuống sẽ tạo ra một số ngoại lệ). Khớp nối ứng dụng này với một người khác (ví dụ: dựa trên tệp) sẽ cho phép không mất bất kỳ thư nào.

+0

Cảm ơn bạn, nhưng điều này không trả lời được câu hỏi - Tôi đang tìm cách kết thúc một ứng dụng/hiện có/Java sử dụng JUL, vì vậy các thư viện bên ngoài không thực sự hữu ích. –

+0

@Tomer Tôi không biết làm thế nào tôi bỏ lỡ điều đó. Tôi đã cập nhật câu trả lời của mình để trang trải cầu nối. –

+0

+1 để sử dụng SLF4J – Matt

4

dự án của chúng tôi cũng đang sử dụng cơ chế java.util.logging, vì vậy, sau khi trải qua một thời gian để tìm ra thực hiện Handler đã sẵn sàng cho giao thức syslog, tôi đã kết thúc bằng cách đọc RFC 3164 và tạo ra thực hiện của riêng tôi http://code.google.com/p/agafua-syslog/

Chúng tôi sử dụng nó trong sản xuất, cả với UDP và TCP vận chuyển. Trong trường hợp lưu lượng thông điệp tường trình của chúng tôi là khoảng 1-2 msg mỗi giây, vì vậy tôi đoán nó có thể áp dụng cho nhu cầu của bạn.

+0

Chúng tôi cũng quyết định sử dụng Agafua-Syslog. chúng tôi cần phải thực hiện một số sửa đổi cho nó và mã ban đầu không thể mở rộng vì vậy chúng tôi đã sao chép mã của anh ấy vào repo địa phương của chúng ta theo cách thủ công và xây dựng JAR của riêng chúng tôi thay vì sử dụng trực tiếp. Anh ta dường như không duy trì nó, vì vậy đó không phải là quá nhiều của một vấn đề tôi đoán. Chúng tôi đã nhìn vào ngã ba của bạn, nhưng nó có vẻ phức tạp hơn chúng tôi cần thiết vì vậy chúng tôi chỉ cần con đường dễ dàng hơn xuống giữa. – Bane

+0

Về cơ bản, những gì chúng tôi có là một loạt các máy chủ Glassfish với khoảng 6 tên miền trên mỗi và sử dụng tính năng nhật ký hệ thống của GF chỉ ghi nhật ký sự kiện là "hostx" - khi những gì chúng tôi thực sự cần là "hostx-domain". Vì vậy, chúng tôi vừa thêm một thuộc tính ('host') vào tệp logging.properties của mỗi miền và sau đó nối thêm thuộc tính đó vào logic ghi nhật ký của trình đăng nhập. – Bane

+0

Và sau đó chúng tôi kết nối [Graylog] (https://www.graylog.org/) để cho phép xem trong trình duyệt, lọc các sự kiện, v.v. – Bane