2016-04-04 3 views
0

Quelqu'un pourrait-il me expliquer la différence entre la découverte & méthodes de liaison suivie par le slf4j & JCL.SLF4J vs JCL - Méthode de liaison

Il n'y a qu'un ou deux documents disponibles en ligne & Je n'arrive pas à comprendre exactement la différence. Seems like JCL tries to look for implementation during runtime, but so does Slf4j - it tries to look for implementation of StaticLoggerBinder on classpath.

code SLF4J:

if (loggerFactoryClassLoader == null) { 
      paths = ClassLoader.getSystemResources(STATIC_LOGGER_BINDER_PATH); 
     } else { 
      paths = loggerFactoryClassLoader.getResources(STATIC_LOGGER_BINDER_PATH); 
     } 

Qu'est-ce qui me manque ici?

Répondre

1

Commons Logging trouve sa mise en œuvre en utilisant les étapes documentées dans le guide de l'utilisateur:

La valeur par défaut la mise en œuvre de LogFactory utilise le processus de découverte suivante pour déterminer quel type de mise en œuvre Log il doit utiliser (le processus se termine lorsque le premier match positif - dans l'ordre - se trouve):

  1. Rechercher un attribut de configuration de cette usine nommée org.apache.commons.logging.Log (pour la compatibilité ascendante pour les versions antérieures à 1.0 de cette API, un Attribut org.apache.commons.log ging.log est également consulté). Les attributs de configuration peuvent être définis explicitement par le code java, mais ils sont généralement définis en plaçant un fichier nommé commons-logging.properties dans le chemin de classe. Lorsqu'un tel fichier existe, chaque entrée dans le fichier de propriétés devient un "attribut" de LogFactory. Quand il y a plus d'un tel fichier dans le classpath, les versions de commons-logging antérieures à 1.1 utilisent simplement la première trouvée. A partir de la version 1.1, chaque fichier peut définir une clé de priorité et le fichier ayant la priorité la plus élevée est utilisé (aucune définition de priorité n'implique une priorité de zéro). Lorsque plusieurs fichiers ont la même priorité, le premier trouvé est utilisé.

    La définition de cette propriété dans un fichier commons-logging.properties est la méthode recommandée pour sélectionner explicitement une implémentation de journal.

  2. Recherchez une propriété système nommée org.apache.commons.logging.Log (pour la rétrocompatibilité avec les versions antérieures à la version 1.0 de cette API, une propriété système org.apache.commons.logging.log est également consultée).

  3. Si le système de journalisation Log4J est disponible dans le chemin d'accès à la classe d'application, utilisez la classe wrapper correspondante (Log4JLogger).
  4. Si l'application s'exécute sur un système JDK 1.4, utilisez la classe wrapper correspondante (Jdk14Logger).
  5. Retour à l'emballage de journalisation simple par défaut (SimpleLog).

La principale différence entre SLF4J et Commons Logging est que l'API Commons Logging est assez primitive tandis que l'API SLF4J est beaucoup plus flexible.