2010-11-11 7 views
12

İşyerimde, günlük iletilerini veritabanına yazan özel bir log4j ekleyicisi yazdık (özel bir iş parçacığını eşzamansız olarak kullanıyor, dolayısıyla hiçbir performans isabeti yok). Dosyaları günlüğe yazmayı çok tercih ederim - veritabanı tabanlı bir günlüğü sorgulamak ve analiz etmek çok daha kolaydır.Java için iyi bir veritabanı günlüğü ekleyicisi?

Bunu yapan bir açık kaynak çözüm var mı (özellikle log4j için veya başka bir java kaydedici)? Bizim appender sahiptir

Bazı şeyler, ben alternatif görmek istiyorum:

  • Kayıtlar istisnalar (duh!)
  • Veritabanı yazıyor ayrı iplik/havuzdan olan

Bizim appender, aşağıdaki sütunları destekler ve ben onların bulduğumuz herhangi bir çözümde hepsini görmek isterim.

  • Zaman
  • mesajı
  • StackTrace
  • işlem kimliği
  • iplik kimliği
  • makine adı
  • bileşen
  • Seviyesi (ayıklama/bilgi// uyarmak LogId. ..)
  • ThreadName

cevap

0

Sen veritabanlarına yazmak için için LOG4J özel appender gerekmez. Apache'nin dağıtımıyla birlikte verilen JDBCAppender'u kullanabilirsiniz.

APACHE belgelerine göre, bu API ileride değiştirilebilir. Ama şimdilik onu kullanıyoruz ve çok iyi çalışıyor.

+0

Belgede, istisnaları günlüğe kaydetmediğinin kırmızı olduğunu söylüyor! – ripper234

+0

@ ripper234: Biliyorum. Ancak, istisnaları günlüğe kaydetmeniz gerektiğini belirtmediniz ... :-) –

+3

Hadi, ciddi olarak ... – ripper234

2

Ayrıca log4j tarafından sağlanan bir DBAppender sınıfı da vardır (log4j, bu ekleyiciyi kullanarak oturum açmak için belirli bir tablo kümesi gerektirir). http://logging.apache.org/log4j/companions/receivers/apidocs/org/apache/log4j/db/DBAppender.html

da deneyebilirsiniz burada mevcut güncelleştirilmiş olmayan Apaçi jdbc kaydedicisi vardır: o ciddi böyle appender barındıran bir uygulama performansını etkilemeyeceği http://www.dankomannhaupt.de/projects/index.html

+0

(Düzeltilmiş) gereksinimlere cevap veriyor mu? – ripper234

+0

Ekleyicinin kaynağı şöyledir: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/db/DBAppender.java?view = işaretleme – Scott

+0

işlem kimliği ve makine adı, bir RewriteAppender'da DBAppender tanımının yuvalanması durumunda özellikler olarak iletilebilir. RewriteAppender, olayın iç içe geçmiş ekleyiciye iletilmesinden önce bir RewritePolicy aracılığıyla günlüğe kaydetme olayını değiştirmenize izin verir. Bakınız: http://logging.apache.org/log4j/companions/receivers/apidocs/org/apache/log4j/rewrite/RewriteAppender.html ve http://logging.apache.org/log4j/companions/receivers/apidocs/org/apache/log4j/rewrite/RewritePolicy.html – Scott

1

Sadece merak? Eşzamansız olarak yaptığınızda, ilişkisel veritabanına doğrudan giriş yapmak oldukça maliyetlidir.

+0

DEBUG mesajlarını açarsanız, performansı etkileyebilir. Yine de, toplu işlerde yapıyoruz, bu yüzden yüzlerce günlük mesajı bir saniyede pompalamadığınız sürece performans üzerindeki etkisi çok büyük değil. – ripper234

+0

Evet, öyle düşündüm. Ancak yığın izlerinin büyük olabileceğini unutmayın. Uygulamanızın günlük yönetimi için adanmış olması halinde - veritabanına doğrudan taahhütler tamam, ancak gerçek bir iş yapması gerekiyorsa, veritabanı katmanı ile uğraşmak ölçeklenebilir bir yaklaşım IMHO gibi görünmüyor. Sorduğun gibi, açık kaynak bir eklenti olduğunu sanmıyorum. JDBCAppender adında bir şey vardı, ama ciddi görünmüyordu. Ticari bir ürüne bakacak olursanız - logarka bakın, tam olarak bunu yapar, ancak daha geniş bir kapsamda ve günlük yönetiminden uygulamayı tamamen çözer. – Dima

+0

Üretim kodunda son üç yıldır orta ölçekli bir sistemde (yaklaşık 20 makine) böyle bir yaklaşım kullandık. Veri katmanınızın "yeterince ölçeklenebilir" olduğunu ve çok fazla günlük mesajı (genellikle INFO & üstü) pompalamadığınızı varsayarsak, avantajları dezavantajlardan daha ağır basar. – ripper234