2010-02-22 14 views
6

Üçüncü taraf bir Java uygulamasının, günlük toplama/analiz çözümümüzü (büyük olasılıkla Splunk, henüz seçimimizi kesinleştirmedik) göz ardı etmek istiyorum. Splunk aracısını syslog'a bağlamak en kolay yol gibi görünüyor, bu yüzden uygulama günlüklerini sunucudaki yerel bir syslog daemonuna yönlendirmenin bir yolunu arıyorum.Syslog'un sağlam bir java.util.logging işleyicisi uygulaması var mı?

Java uygulaması, maalesef bir syslog işleyicisini kutudan (java.util.logging) kullanmıyor. Bunu yapmak için herhangi bir kanıtlanmış kütüphane var mı? Günlük yükü çok büyük değil (muhtemelen her işlemden dakikada 10-20 mesaj, ana bilgisayar başına 6 işleme kadar), ancak güvenilirlik ve dayanıklılık ile ilgileniyorum (örneğin, arka plan aşağıdayken ne olur? ...).

Herhangi bir yardım mutluluk duyacağız ...

cevap

8

SLF4J kullanabilirdin SLF4J (ve dolayısıyla log4j veya logback için) java.util.logging olaylarının iletilmesi için bir bridge sahiptir. Bir performans maliyeti vardır (bağlantıya bakınız), ancak yükünüzün verilmesi, bu büyük bir anlaşma olmamalıdır. Bu yüzden Log4J'nin SyslogAppender'unu (veya daha iyi bir halefini, SyslogAppender'un da bulunduğu logback) kullanabilirsiniz. Bu appender ile herhangi bir deneyimim yok (bu yüzden bu biraz test gerektirebilir), ancak logback kesinlikle güvenilir bir kütüphanedir ve "nopexception" veya "nopex" kullanarak yığın izlerini yazdırmayacak şekilde yapılandırılabileceğini biliyorum. conversion word daemon aşağıdayken mesaj göndermek bazı istisnalar oluşturacaktır). Bu ekleyicinin başka biriyle (örneğin dosya tabanlı) birleştirilmesi, herhangi bir mesajı kaybetmemesine izin verecektir.

+0

Teşekkürler, ama bu soruya cevap vermiyor - JUL kullanan bir/var olan/Java uygulamasını çağıracağım, bu yüzden dış kütüphaneler gerçekten kullanışlı değil. –

+0

@Tomer Bunu nasıl özledim bilmiyorum. Köprüyü kapatmak için cevabımı güncelledim. SLF4J –

+0

+1 bir göz atın, teşekkürler! – Matt

4

Projemiz de, benim kendi uygulama RFC 3164 okuyarak ve oluşturarak sona erdi günlüğü protokolünün hazır Handler uygulanmasını bulmak için biraz zaman geçirdikten sonra, java.util.logging mekanizmasını kullanarak, bu yüzden edilir http://code.google.com/p/agafua-syslog/

Biz UDP ve TCP aktarımları ile üretimde kullanıyor. Bizim durumumuzda, günlük mesajlarının akışı saniyede yaklaşık 1-2 msg'dir, bu yüzden muhtemelen ihtiyaçlarınız için geçerli olabilir.

+0

Agafua-Syslog'u da kullanmaya karar verdik. bunun için bazı modlar yapmamız gerekiyordu ve orijinal kod genişletilemiyordu, bu yüzden kendi kodunu kendi yerel repo'mıza manuel olarak kopyalayıp kendi JAR'ını doğrudan yerine kullanmak yerine kurduk. Onu korumak için görünmüyor, bu yüzden tahmin ettiğim bir sorun değil. Çatalınıza bir göz attık, ama ihtiyacımız olandan çok daha karmaşık görünüyordu, bu yüzden daha kolay olan yolu orta noktadan aldık. – Bane

+0

Esasen, her biri üzerinde 6 etki alanı bulunan ve GF'nin syslog özelliğini kullanan bir grup Glassfish sunucusu, olayları "hostx" olarak kaydetmekti - gerçekten ihtiyacımız olan şey "hostx-domain" idi. Bu yüzden, her domainin logging.properties dosyasına bir özellik ('host') ekledik ve ardından bu özelliği loghandler'in logging mantığına ekledik. – Bane

+0

Ve sonra biz tarayıcıda görüntüleme sağlamak için [Graylog] (https://www.graylog.org/) wired-up, olaylar için filtreleme, vb – Bane