2010-11-11 9 views
12

Sur mon lieu de travail, nous avons écrit un appender log4j personnalisé qui écrit des messages de log dans la base de données (utilise un thread dédié de manière asynchrone, donc pas de hit de performance). Je préfère beaucoup l'écriture aux fichiers journaux - un journal basé sur une base de données est beaucoup plus facile à interroger et à analyser.Un bon appender log de base de données pour Java?

Existe-t-il une solution open source qui le fait (spécifiquement pour log4j ou tout autre enregistreur java)?

Certaines choses que notre appender a, et je voudrais voir dans une alternative:

  • Logs exceptions (! Duh)
  • écrit la base de données sont d'un thread séparé/piscine

Notre appender supporte les colonnes suivantes, et j'aimerais les voir toutes dans la solution que nous trouvons.

  • LOGID
  • temps
  • un message
  • stacktrace
  • id processus
  • id fil
  • nom de la machine
  • composant
  • Niveau (debug/info/mettre en garde /. ..)
  • ThreadName

Répondre

0

Vous n'avez pas besoin appender personnalisé pour LOG4J écrire à des bases de données. Vous pouvez utiliser JDBCAppender associé à la distribution d'Apache. Selon la documentation d'APACHE, cette API pourrait être remplacée dans le futur. Mais pour l'instant, nous l'utilisons et cela fonctionne très bien.

+0

Il est écrit en rouge dans la documentation qu'il ne consigne pas les exceptions! – ripper234

+0

@ ripper234: Je sais. Vous n'avez pas précisé que vous devez enregistrer des exceptions si ... :-) –

+3

Allons, sérieusement ... – ripper234

2

Il existe également une classe DBAppender fournie par log4j (log4j nécessite un ensemble spécifique de tables à consigner à l'aide de cet appender). http://logging.apache.org/log4j/companions/receivers/apidocs/org/apache/log4j/db/DBAppender.html

Il est un enregistreur jdbc non Apache mis à jour ici, vous pouvez également essayer: http://www.dankomannhaupt.de/projects/index.html

+0

Répond-il aux exigences (révisées)? – ripper234

+0

Voici la source de l'appender: http://svn.apache.org/viewvc/logging/log4j/companions/receivers/trunk/src/main/java/org/apache/log4j/db/DBAppender.java?view = markup – Scott

+0

L'ID du processus et le nom de la machine peuvent être transmis en tant que propriétés si la définition DBAppender est imbriquée dans un RewriteAppender. RewriteAppender vous permet de modifier l'événement de journalisation via un RewritePolicy avant de passer l'événement à l'appender imbriqué. Voir: http://logging.apache.org/log4j/companions/receivers/apidocs/org/apache/log4j/rewrite/RewriteAppender.html et http://logging.apache.org/log4j/companions/receivers/apidocs/org/apache/log4j/rewrite/RewritePolicy.html – Scott

1

Juste curieux, ne serait-il gravement affecter la performance d'une application d'hébergement tels appender? La journalisation directement dans la base de données relationnelle est très coûteuse, même si vous le faites de manière asynchrone.

+0

Eh bien, si vous activez les messages DEBUG, cela pourrait affecter les performances. Pourtant, nous le faisons par lots, donc l'effet sur la performance n'est pas énorme, sauf si vous êtes vraiment pompage des centaines de messages de journal par seconde. – ripper234

+0

Oui, je le pensais. Notez cependant que les traces de pile peuvent être grandes. Si votre application est dédiée à la gestion des journaux - les validations directes à la base de données sont correctes, mais si elles sont supposées faire un travail réel, les tracas avec la base de données ne semblent pas être une approche évolutive. Je ne pense pas qu'il existe un appender open source comme vous le demandez, pas vu un. Il y avait une fois JDBCAppender, mais ça n'avait pas l'air sérieux. Si vous regardez dans un produit commercial - regardez les logfaces, il fait exactement ceci mais dans une portée plus large et découpler complètement l'application de la gestion de journal. – Dima

+0

Nous avons utilisé une telle approche dans le code de production pour les trois dernières années, dans un système à moyenne échelle (environ 20 machines). En supposant que votre niveau de données est "suffisamment évolutif" et que vous ne pompez pas trop de messages de journal (généralement INFO et plus), je trouve que les avantages l'emportent sur les inconvénients. – ripper234

Questions connexes