41 votes

Trouvez-vous que java.util.logging est suffisant?

Selon le titre, trouvez-vous le cadre de journalisation Java par défaut suffisant pour vos besoins?

Utilisez-vous des services de journalisation alternatifs tels que log4j ou autres? Si oui, pourquoi? J'aimerais entendre vos conseils concernant les exigences de journalisation dans différents types de projets, et lorsque l'intégration de cadres est réellement nécessaire et / ou utile.

46voto

Huxi Points 2629

java.util.d'enregistrement (jul) est inutile depuis le début. Juste l'ignorer.

jul en lui-même a les inconvénients suivants:

  • Au moment de juillet a été introduit dans Java 1.4 il y a déjà bien établi journalisation dans une large utilisation: LOG4J
  • les prédéfinis niveaux de journal sont: SÉVÈRE, WARNING, INFO, CONFIG, FINE, plus FINE, plus BEAUX. Je ne vais pas vous dire ce que je pense personnellement au sujet de ces niveaux prédéfinis de garder cette réponse semi-objectif.
  • Des niveaux supplémentaires peuvent être définis. jul prend en charge jusqu'à 4G différents niveaux de journal, ce qui est légèrement exagéré, à mon humble avis. Moins est parfois plus.
  • Le point le plus important: si vous osez vous de définir votre propre niveau de journal, vous risquez de provoquer un problème de fuite de mémoire!
    N'hésitez pas à lire à propos de cet effet ici:

    C'est assez intéressant à lire même si vous ne prévoyez pas d'utiliser des niveaux personnalisés, d'ailleurs, car le problème est largement un qui ne s'applique pas seulement au juil à tous.

  • elle réside dans le java.* espace de noms de sorte que la mise en œuvre ne peuvent pas être échangés lors de l'exécution. Cela empêche efficacement le combler de SLF4J de la même façon son possible dans le cas des communes.journalisation et de LOG4J. La façon dont l'intégration est fait pour jul a un impact sur les performances. Cela rend jul les plus rigides de la structure de journalisation là-bas.
  • Par l'introduction de juillet, le Soleil définit implicitement à la "norme de l'enregistrement de java framework". Cela a conduit à l'idée répandue qu'un "bon Java citoyen" doit utiliser jul dans leurs bibliothèques ou des applications.
    Le contraire est le cas.
    Si vous utilisez une de ces communes.l'exploitation forestière ou de LOG4j vous serez en mesure d'échanger le fait utilisé de journalisation, si vous en avez besoin, par l'intégration d'SLF4J. Cela signifie que les bibliothèques en utilisant soit des communes.la journalisation, LOG4J ou SLF4J pouvez tous les journaux à la même cible de journalisation, par exemple, fichier.

Je serais personnellement vous suggérons d'utiliser le SLF4J+Logback combo pour tous les besoins de journalisation. Les deux projets sont coordonnés par Ceki Gülcü, le gars derrière LOG4J.
SLF4J est un digne (mais non officielle puisqu'il n'est pas du même groupe) successeur de communes.la journalisation. C'est moins problématique que CL, car il statiquement résout le fait utilisé la journalisation backend. En outre, il est plus riche API de CL.
Logback, d'autre part, est l' (onu)successeur officiel de LOG4J. Il met en œuvre SLF4J nativement donc il n'y a pas de surcharge causée par un wrapper.

Maintenant, vous pouvez downvote-moi si vous pensez que je le mérite. ;)

23voto

Elijah Points 6464

La journalisation des Dépendances avec des Bibliothèques Tierces

Java JDK l'exploitation forestière dans la plupart des cas, n'est pas insuffisant par lui-même. Toutefois, si vous avez un grand projet qui utilise plusieurs open-source des bibliothèques tierces, vous découvrirez rapidement que beaucoup d'entre eux ont disparates journalisation des dépendances.

C'est dans ces cas où le besoin de résumé de votre API de journalisation de votre journalisation de mise en œuvre de devenir important. Je recommande l'utilisation de slf4j ou logback (utilise le slf4j API) que votre API et si vous voulez coller avec le JDK Java journalisation, vous pouvez encore! Slf4j pouvez générer beaucoup de différents enregistreur implémentations sans problèmes.

Un exemple concret de l'utilité qui s'est passé lors d'un récent projet: nous avons besoin d'utiliser des libs qui avait besoin de log4j, mais nous ne voulons pas courir deux journalisation des cadres côte à côte, nous avons donc utilisé la slf4j api log4j wrapper libs et le problème a été résolu.

En résumé, le JDK Java journalisation est bien, mais un normalisée de l'API qui est utilisé dans mes bibliothèques tierces, vous fera économiser temps dans le long terme. Essayez juste d'imaginer refactoring chaque déclaration logging!

16voto

sblundy Points 27163

SLF4J est le petit nouveau. J'ai fait un peu de travail avec elle et c'est assez sympa. C'est le principal avantage est paramétrisée de journalisation, ce qui signifie que vous n'avez ceci:

logger.debug("The new entry is {}. It replaces {}.", entry, oldEntry);

Plutôt que de ceci:

logger.debug("The new entry is " + entry + ". It replaces " + oldEntry + ".");

Et tout ce que la manipulation de la chaîne se fait uniquement si la déclaration est effectivement connecté. Semble plus propre aussi.

Il convient de noter que SLF4J est un wrapper comme commons-logging, si elle prétend être moins sujettes à commons-logging du chargeur de classe de problèmes.

11voto

gnomie Points 311

Nous utilisons java.util.la journalisation dans l'ensemble. Aussi pour les grands projets. Il ya quelques choses que vous devez ajuster (par exemple, la mise en forme par défaut), mais c'est sur le point réel. - Je trouver le numéro de l'enregistrement des cadres de Java et de la fonction de fluage-ils mis en œuvre plutôt ennuyeux et un peu de honte pour la communauté Java. Le niveau de religuous débat sur la journalisation est un signe certain que quelque chose allait très mal.

Ce JUL vous donne est simple mais suffisant, de l'API et un lieu unique pour configurer ce que la sortie du journal que vous voulez voir (journalisation.propriétés ou JMX...). Et son toujours là et stable.

Tout le code qui veut ouvrir une session doit respecter les conventions (niveau par défaut est INFO) et sinon, ne pas plus, mais l'utilisation d'enregistreurs de un nom significatif (par exemple, package ou un nom de classe) et vous serez amende.

8voto

TofuBeer Points 32441

Sauf s'il existe une raison impérieuse d'utiliser quelque chose en dehors du JDK, je préfère utiliser ce qui est fourni par Sun.

De nombreux projets qui utilisent la journalisation Log4J l'utilisaient avant que l'API de journalisation "standard" n'existe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X