Quelle est la différence entre Java Logger et System?hors.println

j'ai cherché l'api à propos de la classe logger(ici) et j'ai été à la recherche à l' Logger.info méthode. J'ai été confus quand j'ai vu son périmètre comme un message affiché comme une chaîne de caractères public void info(String msg) ce qui est identique à System.out.println(). Je me demande Quelle est la différence entre ces deux-là, et pourquoi utilisons-nous Logger au lieu de System.out.println quand ils peuvent imprimer la même chose.

Dans L'Enregistreur.

Logger.info("Hello")

Sortie:

[INFO ] 2015-08-07 11:18:46.140 [main] ClassName Hello

Dans System.out.println

`Système.hors.println("Bonjour")

Sortie: Bonjour

11
demandé sur RedRocket 2015-08-07 06:49:39

4 réponses

Habituellement, parce que un Logger peut être configuré pour écrire dans un fichier (dans la console). Il peut également être configurée au niveau supérieur (ou inférieur) granularité de messagerie. Par exemple, vous pouvez configurer (à l'exécution) pour le niveau de warn. Dans ce cas, ce pillard ne s'afficherait pas!-2 -- > debug ou info messages. Il peut inclure des renseignements tels que la classe qui écrit, un numéro de ligne et une date et une heure (du message).

12
répondu Elliott Frisch 2015-08-07 03:52:01

L'utilisation d'un logger vous permet d'abstraire beaucoup de détails et de faire beaucoup plus que vous pourriez écrire à stdout.

  • Vous pouvez spécifier différentes destinations à écrire. Différents utilisateurs écrivent à un fichier, roulent le fichier pour des périodes données, écrivent à une file d'attente ou à une base de données, etc.

  • vous pouvez spécifier un format cohérent pour les messages de journal au lieu d'avoir à l'ajouter à chaque ligne que vous écrivez à stdout.

  • vous peut choisir un appender qui tamponne la sortie de sorte que plusieurs threads peuvent se connecter sans avoir les threads combattent pour la serrure sur l'objet console.

  • vous pouvez faire beaucoup avec le filtrage par catégorie (généralement paquet et nom de classe) et le niveau de log (trace, debug, info, erreur, fatal), pour le rendre facile de configurer quels messages de log vous voulez voir et que vous voulez ignorer. Avec la journalisation, vous pouvez modifier la configuration dans les propriétés logger ou inclure une page dans votre demande de changement de ce qui est filtré à la volée.

  • vous pouvez mélanger et faire correspondre ce genre de choses, par exemple, configurer un appender smtp spécifique pour envoyer des messages de journalisation pour le niveau d'erreur de journalisation ou plus, en plus d'écrire les messages dans un fichier roulant ou autre.

5
répondu Nathan Hughes 2015-08-07 04:14:44

la différence principale entre un Logger et le système.hors.println

Logger: Imprime le texte dans un fichier(fichier texte)

System.out.println: imprime la sortie dans la console



Logger est utile lorsque vous allez à des projets en direct.

Parce que si un projet est développé et déployé, alors vous ne pouvez pas vérifier la console. A ce moment Logger sera utile pour suivre le flux de votre projet vous pouvez également trouver de l'Erreur ou Exception si vous avez donné le logger dans la prise{...} bloc.

Passez aussi par ceci Enregistreur de vs Système.hors.println

3
répondu programmer 2017-05-23 12:34:27
  • mais lorsque nous utilisons un mécanisme de journalisation(log4j, slf4j, logback etc) nous configurer les appenders et les fichiers de log cibles correspondants pour chaque paquet. Par défaut, la console appender est désactivée sauf si vous configurez-le explicitement pour qu'il se connecte à une destination.

  • Le Système.hors.println enregistre toujours le message sur une console appender. Donc, il devrait être utilisé que lorsque nous sommes sûrs que la console appender est configuré dans le fichier de configuration du logger. Sinon nous sommes en fin de jusqu' avoir des logs connectés à la console du serveur, ce qui est incorrect. Un journal de à l'intérieur de l'application doit aller au journal d'application correspondant et pas le journal du serveur.

Laissez-moi vous expliquer avec un exemple.

  • si nous construisons une application appelée Tracker en utilisant un mécanisme de journalisation pour exécuter dans un conteneur tomcat, et nous avons configuré des appenders pour la journalisation des applications avec le fichier de log de destination comme tracker-application.journal et nous n'avons pas configurer la console appender.
  • alors si le système.hors.println est rencontré par la JVM puis le journal va aller dans le journal du serveur du serveur tomcat ce qui est faux car le journal du serveur ne doit contenir que des informations sur le serveur et non sur l'application.

mais si nous avons créé une console appender avec un fichier cible log alors il sera enregistré correctement.

j'Espère avoir été le plus clair. ;)

Pour les meilleures pratiques référer N'utilisez pas le système.hors.println à côté serveur code ou http://www.vipan.com/htdocs/log4jhelp.html

pour les différences entre les deux s'il vous plaît se référer Enregistreur de vs Système.hors.println

2
répondu Vero J 2017-05-23 12:02:43