2017-04-04 2 views
1

enregistreur racine est configuré pour être un enregistreur synchrone à INFO niveau. J'ai aussi quelques enregistreurs Async. L'un des enregistreurs asynchrones est configuré à un niveau de journal supérieur personnalisé TOAST (789). C'est plus élevé que le niveau TRACE (600).problème de niveau de journal personnalisé dans log4j2

La raison pour ce faire est d'avoir un niveau de journal qui peut être utilisé pour des événements spéciaux pour être enregistrés via enregistreur Async et leurs propres appenders.

Nous ne voulons pas que les événements TOAST soient dirigés vers les enregistreurs racines synchrones ou d'autres enregistreurs .. mais seulement vers le logger Async TOAST et ses appenders correspondants .. est-ce possible?

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration monitorInterval="120" packages=“com.pack.toast”> 
    <CustomLevels> 
     <CustomLevel name=“TOAST” intLevel=“789” /> 
    </CustomLevels> 

    <Appenders> 
     <RollingFile fileName="${sys:catalina.base}/logs/packiu.log" 
      append="true" name="DRFILE" 
      filePattern="${sys:catalina.base}/logs/packiu-%d{yyyy-MM-dd}-%i.log"> 
      <PatternLayout> 
       <Pattern>%d [%t] %c %M - %p: %m%n</Pattern> 
      </PatternLayout> 
      <Policies> 
       <OnStartupTriggeringPolicy /> 
       <SizeBasedTriggeringPolicy size="10 MB" /> 
      </Policies> 
      <DefaultRolloverStrategy max="30" /> 
     </RollingFile>   
     <RollingFile name="RollingFile" fileName="/Users/toasty/logs/roll_file_app.log" 
        filePattern="logs/app-%d{MM-dd-yyyy}.log.gz" immediateFlush="true" > 
       <PatternLayout> 
         <pattern>%m%n</pattern> 
       </PatternLayout> 
       <TimeBasedTriggeringPolicy /> 
     </RollingFile> 
     <Rewrite name="Rewrite" ignoreExceptions = "true" > 
      <ToastAppenderPolicy toastNeeded="true"> 
      </ToastAppenderPolicy> 
      <AppenderRef ref="RollingFile"/> 
     </Rewrite> 

    </Appenders> 
    <Loggers> 
     <Logger name="net.rubyeye" level="off" /> 
     <Logger name="com.google.code" level="off" />    

     <AsyncLogger name="com.pack.toast.ToastLoggerImpl" level=“TOAST” includeLocation="true"> 
      <AppenderRef ref="Rewrite" /> 
     </AsyncLogger> 

     <Root level="info"> 
      <AppenderRef ref="DRFILE" /> 
     </Root> 

    </Loggers> 
</Configuration> 

Répondre

0

Il me semble que vous voulez vraiment un enregistreur nommé pas un niveau personnalisé parce que vous ne voulez jamais vos messages pour aller à un enregistreur et ses appenders. Peut-être que vous devriez utiliser quelque chose comme:

<AsyncLogger name="TOAST_LOGGER" level=“INFO” includeLocation="true"> 
    <AppenderRef ref="Rewrite" /> 
</AsyncLogger> 

puis dans votre code

private static final Logger TOAST_LOGGER = LogManager.getLogger("TOAST_LOGGER"); 
... 
TOAST_LOGGER.info("Toast message"); 
... 

Sinon, si vous devez utiliser un niveau de journal personnalisé vous pouvez accomplir ce que vous voulez en filtering avec un Threshold Filter.

+0

Merci pour l'info @ D.B. J'ai fait le logger nommé exactement comme indiqué mais le message de journal se termine toujours dans la sortie de l'enregistreur, malheureusement .. (racine synchrone et également avec le logger nommé asynchrone). Voici un exemple de la sortie qui va à l'enregistreur SYNC - '2017-04-03 23: 04: 42,534 [http-nio-8443-exec-1] TOAST_LOGGER journal - INFO: blah'. Des pensées? Je vais bien sans un niveau de journal personnalisé, si cette approche pouvait être faite pour fonctionner. Merci – user46743

+0

Je crois que c'est probablement dû à l'additivité. Reportez-vous à la section [additivité] (https://logging.apache.org/log4j/2.x/manual/configuration.html#Additivity) de la documentation log4j2 et définissez l'additivité sur false sur le ou les loggers appropriés. Je pense que le paramétrer sur false sur le toast logger devrait suffire car il dit: «Une fois qu'un événement atteint un logger avec son additivité défini sur false, l'événement ne sera pas transmis à ses enregistreurs parents, quel que soit leur paramètre d'additivité " –

+0

Merci @ D.B. l'additivité semble avoir résolu le problème des valeurs transmises au parent. – user46743