2014-05-11 16 views
11

Come attivare o disattivare dinamicamente un appender di rootLogger in log4j2 di java in fase di runtime?Come attivare o disattivare dinamicamente un appender di rootLogger in log4j2?

per esempio, voglio disattivare Console Appender:

... 
    <Loggers> 
     <Root level="INFO"> 
      <AppenderRef ref="Console"/> 
      <AppenderRef ref="RollingFile"/> 
     </Root> 
    </Loggers> 
... 

E 'possibile?

+0

IMO è necessario aggiungere le appendici a livello di codice, se si desidera manipolarle tramite codice. Ecco alcune domande simili http://stackoverflow.com/questions/10699358/log4j-creating-modifying-appenders-at-runtime-log-file-recreated-and-not-appe e http://stackoverflow.com/questions/1909871/how-can-i-access-the-configure-log4j-appenders-at-runtime – Hirak

+0

Non ho molto contesto. Ma forse puoi disabilitarlo/abilitarlo via JMX in fase di runtime? – drgn

risposta

0

È possibile aggiungere un filtro di script all'appender della console che controlla il valore di una proprietà di sistema. Quindi imposta la proprietà quando vuoi che la registrazione alla console sia disabilitata. Ripristina quando vuoi riaccenderlo.

1

È possibile aggiungere o rimuovere un appender a livello di programmazione. Nel tuo caso cerchiamo di rimuovere Console

final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); 
final Configuration config = ctx.getConfiguration(); 
config.getRootLogger().removeAppender("CONSOLE"); 
ctx.updateLoggers(); 

C'è un'interfaccia LifeCycle con i metodi stop e start, ma sembra che non è possibile riavviare un appender dopo che è stato arrestato.