2012-09-21 3 views
1

J'ai fait un peu de Google autour mais je n'ai trouvé aucune information pertinente. log4j prend en charge un groupe de journal appenders, il y a des documents sur le net à propos de ConsoleAppender et FileAppender, mais il y a très peu ou pas d'informations sur appenders telles que NullAppender, JDBCAppender etc. Je suis particulièrement intéressé au sujet NullAppender.A propos de log4j.xml NullAppender

<appender name="???" class="org.apache.log4j.varia.NullAppender"> 
<appender name="???" class="org.apache.log4j.jdbc.JDBCAppender"> 

Quelqu'un at-il des informations spécifiques sur ces? en particulier sur le NullAppender? J'ai commencé à chercher here.

Répondre

5

Pour le NullAppender, il n'y a pas beaucoup de doc en grande partie parce qu'il n'y a rien à configurer: vous pouvez en définir un avec <appender name="foo" class="org.apache.log4j.varia.NullAppender"/> et c'est à peu près tout. À partir du Javadoc:

Un NullAppender existe simplement, il ne sort jamais de message vers un périphérique.

Il n'y a pas beaucoup de façons différentes de ne rien faire. (Il existe de sorte que vous pouvez la corbeille de sortie sans modifier trop de votre config.)

Pour le JDBCAppender, le Javadoc est ici: http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/jdbc/JDBCAppender.html
Les param balises dans la configuration XML correspondent à setters dans la classe Java, mais Notez le grand avertissement rouge en haut de la Javadoc:

AVERTISSEMENT: cette version de JDBCAppender est susceptible d'être complètement remplacée à l'avenir. De plus, il ne consigne pas les exceptions.

Alors peut-être pas la meilleure classe à appuierez, étant donné que v2.0 log4j est actuellement en version bêta, et un coup d'œil sur le alpha release semble indiquer qu'il n'existe pas dans v2.

+0

Eh bien, je n'étais pas trop optimiste à ce sujet non plus :) mais merci quand même. – Annjawn

+1

@Annjawn Si vous avez vraiment besoin de vous connecter à votre base de données, votre meilleur pari est probablement de [lancer le vôtre] (http://logging.apache.org/log4j/2.x/manual/extending.html#Appenders), soit en étendant un existant, soit en implémentant simplement l'interface Appender. – CCC

+0

Ouais, j'aurais pensé le faire mais pour l'instant je suis content de la console et des extensions de fichiers. – Annjawn

0

Un google simple pour cette classe vous obtiendrez

Nullappender

Donc, essentiellement, si vous utilisez le NullAppender vos messaged journaux sont écrits nulle part.

+0

Comment pratique. Pourquoi est-ce que je l'utiliser si je ne veux pas ajouter mes messages de journal n'importe où? Un exemple spécifique? – Annjawn

+0

Disons que j'ai un arbre hiérarchique de catégories. Je veux toutes les catégories à un certain niveau ou ci-dessous pour ne rien enregistrer. Je peux localiser ce niveau et définir le seuil sur AUCUN. Cela ne résout pas mon problème parce que je pourrais avoir des dizaines de déclarations de sous-catégorie remplaçant le paramètre NONE. Pour résoudre ce problème, je peux définir l'appender de la catégorie pinpoint sur NullAppender et l'additivité de l'appender sur false. Quand je change d'avis plus tard, inverser les changements. Les deux fois j'ai pu laisser toutes mes déclarations de sous-catégorie seules. Certes, le basculement des commentaires pourrait avoir le même effet. –

0

Le NullAppender ne fait fondamentalement rien, comme d'autres l'ont déjà fait remarquer. Je voulais juste mettre en page quelques détails.

 
     AppenderSkeleton implements Appender { 
      ... 
      @Override 
      public synchronized void doAppend(LoggingEvent event) { 
      ... 
      } 
      ... 
      abstract protected void append(LoggingEvent event); 
     } 

     public class NullAppender extends AppenderSkeleton { 
      public static String s; 
      public String t; 
      ... 
      @Override 
      public void doAppend(LoggingEvent event) { 
      if(layout != null) { 
       t = layout.format(event); 
       s = t; 
      } 
      } 
      @Override 
      public void append(LoggingEvent event) { 
      } 

Voir aussi: Source-NullAppender & Source-AppenderSkeleton

Que se passe à chaque log.trace/debug/... appel est

 
-> org.apache.log4j.Category.forcedLog(String fqcn, Priority level, Object message, Throwable t) 
-> org.apache.log4j.Category.callAppenders(LoggingEvent event) 
-> org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(LoggingEvent event) is called on each Appender within that Logger 
-> org.apache.log4j.Appender.doAppend(LoggingEvent event) 
which is NullPointers implementation of doAppend in this case. 

Comme vous le voyez, le NullAppender enlève la synchronisation, NullAppender.doAppend produit un certain temps système, mais il est très faible dans la plupart des scénarios.

Comme pour JDBCAppender il ne doit pas être utilisé.

 
     WARNING: This version of JDBCAppender 
     is very likely to be completely replaced in the future. Moreoever, 
     it does not log exceptions. 

Voir: JDBC-Appender-Source Ligne 34-36

En tant alternatif vous pouvez consulter clusterlog