2014-05-11 4 views
11

Wie man einen Applet von rootLogger in log4j2 durch Java zur Laufzeit dynamisch ein- oder ausschaltet?Wie kann man einen Applet von rootLogger in log4j2 dynamisch ein- oder ausschalten?

zum Beispiel, I want to Console Appender deaktivieren:

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

Ist es möglich?

+0

IMO müssen Sie die Appender programmatisch hinzufügen, wenn Sie sie durch Code manipulieren möchten. Hier sind einige ähnliche Fragen http://stackoverflow.com/questions/10699358/log4j-creating-modifying-appenders-at-runtime-log-file-recreated-and-not-appe und http://stackoverflow.com/questions/1909871/how-can-i-Zugriff-the-configured-log4j-Appenders-zur Laufzeit – Hirak

+0

Ich habe nicht viel Kontext. Aber vielleicht können Sie es über JMX zur Laufzeit deaktivieren/aktivieren? – drgn

Antwort

0

Sie könnten der Konsole appenderref einen Skriptfilter hinzufügen, der den Wert einer Systemeigenschaft überprüft. Dann legen Sie einfach die Eigenschaft fest, wenn die Protokollierung auf der Konsole deaktiviert werden soll. Setzen Sie es zurück, wenn Sie es wieder einschalten möchten.

1

Sie können einen Appender programmgesteuert hinzufügen oder entfernen. In Ihrem Fall lassen Sie uns Console

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

entfernen Es gibt eine LifeCycle Schnittstelle mit Methoden stop und start, aber es sieht aus wie Sie ein appender nicht neu gestartet werden kann, nachdem er gestoppt wurde.