2017-02-22 7 views
0

J'ai un nom d'utilisateur Async qui ne fonctionne que lorsque j'ai défini le niveau = debug. Pour le niveau "erreur", il ne consigne rien.log4j2 L'application Async fonctionne uniquement pour le niveau de débogage

<Configuration packages="com.custom.appender"> 
<Appenders> 
<CustomLogger name="customLogger"/> 
<Async name="customAsync" bufferSize="2" includeLocation="flase"> 
    <AppenderRef ref="customLogger"/> 
</Async> 
</Appenders> 
<Loggers> 
<logger name="com.mypackage" level="error"> 
    <AppenderRef ref="customAsync"/> 
</logger> 
</Loggers> 
</Configuration> 

Je ne suis pas sûr de ce qui me manque dans cette configuration. Ceci est le appender personnalisé que je suis en train d'utiliser

package com.custom.appender 
@Plugin(name = "CustomLogger", category = "Core", elementType = "appender", printObject = true) 
public class CustomLogger extends AbstractAppender { 

private static volatile CustomLogger instance; 

public CustomLogger(final String name, final Filter filter, 
     final Layout<? extends Serializable> layout) { 
    super(name, filter, layout); 
} 

@PluginFactory 
public static CustomLogger createAppender(
     @PluginAttribute("name") String name, 
     @PluginAttribute("ignoreExceptions") boolean ignoreExceptions, 
     @PluginElement("Layout") Layout layout, 
     @PluginElement("Filters") Filter filter) { 
    if (layout == null) { 
     layout = PatternLayout.createDefaultLayout(); 
    } 

    instance = new CustomLogger(name, filter, layout); 
    return instance; 
} 

public static CustomLogger getInstance() { 
    return instance; 
} 

@Override 
public void append(LogEvent event) { 
    //Log the event to mongoDB 
} 

}

+0

Quel type de appender vous essayez d'utiliser? Est-ce un appender console? –

+0

Je ne pense pas que faire référence à un élément logger de l'élément Async Appender est correct. De là, vous devez accéder à un appender. –

+0

https://logging.apache.org/log4j/2.x/manual/configuration.html –

Répondre

0

Effectuez les opérations suivantes

<Configuration packages="com.custom.appender"> 
    <Appenders> 
     <Async name="customAsync" bufferSize="2" includeLocation="flase"> 
      <AppenderRef ref="customConsoleLogger"/> 
     </Async> 
     <Console name="customConsoleLogger" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </Console> 
    </Appenders> 

    <Loggers> 
     <Logger name="com.mypackage" level="INFO"> 
      <AppenderRef ref="customAsync"/> 
     </Logger> 
    </Loggers> 
</Configuration> 
+1

Ce code fonctionne mais quand je commute l'enregistreur en Async utiliser mon enregistreur personnalisé, c'est quand j'ai un problème. Dans mon enregistreur personnalisé, je connecte l'événement à mongoDB, le contrôle va dans mon appender mais rien n'est enregistré dans mongoDB quand le niveau est une erreur. Si je change le niveau pour déboguer je vois mes événements dans mongoDB – Anyz

+0

@Anyz Avez-vous des erreurs log là dedans? Lorsque vous définissez le niveau de journalisation sur ERROR, vous ne verrez que les journaux ERROR et FATAL. –

+0

Je pense que j'ai peut-être trouvé la cause. Je ne pense pas que cela ait quelque chose à voir avec le niveau. Quand je suis en train d'enregistrer ERROR, je n'ai pas beaucoup d'événements qui vont à l'appender et j'essaye de me connecter à mongoDB dans ma méthode append() et ça échoue sur mon mongo. Fait intéressant, je ne reçois aucune erreur, mais je mets un enregistrement explicite et je peux le voir s'arrête juste sur ma commande write mongo. – Anyz