2010-11-25 8 views
0

Ich möchte mehrere Instanzen des Log4j Logger verwenden. Ich muss an jede dieser log4j Logger-Instanzen verschiedene Properties-Objekte anhängen. Hiermehrere Log4j Instanzkonfiguration

ist der Code für eine Instanz zu konfigurieren:

LOG4J = org.apache.log4j.Logger.getLogger(Logger.class); 

Properties log4jProps = new Properties(); 

... 

PropertyConfigurator.configure(log4jProps); 

Was passiert, wenn ich will zwei log4j Instanz haben und jeder von ihnen hat unterschiedliche Eigenschaften?

Antwort

7

Können Sie erklären, warum Sie mehrere Logger detaillierter möchten? Ich denke nicht, dass es mehrere log4j-Instanzen geben kann.

Wenn Sie nur mehr Appen will, schauen Sie hier:

Hier ist die log4j.properties aus dem obigen Link:

# logj4.properties 
log4j.rootCategory = WARN, A 
log4j.category.com.lewscanon = WARN, F 
log4j.category.com.lewscanon.mouser = DEBUG, X 

log4j.appender.A = org.apache.log4j.ConsoleAppender 
log4j.appender.A.layout = org.apache.log4j.PatternLayout 

log4j.appender.F = org.apache.log4j.RollingFileAppender 
log4j.appender.F.layout = org.apache.log4j.PatternLayout 
log4j.appender.F.File = /projects/mouser/logs/lewscanon.log 
log4j.appender.F.MaxFileSize = 512KB 
log4j.appender.F.MaxBackupIndex = 2 

log4j.appender.X = org.apache.log4j.RollingFileAppender 
log4j.appender.X.layout = org.apache.log4j.PatternLayout 
log4j.appender.X.File = /projects/mouser/logs/mouser.log 
log4j.appender.X.MaxFileSize = 512KB 
log4j.appender.X.MaxBackupIndex = 2 

log4j.appender.A.layout.ConversionPattern= %d %-16c{1}:%-39m %-t %x%n 
log4j.appender.F.layout.ConversionPattern= %d %-16c{1}:%-39m %-t %x%n 
log4j.appender.X.layout.ConversionPattern= %d %-16c{1}:%-39m %-t %x%n 

Diese Linien:

log4j.rootCategory = WARN, A 
log4j.category.com.lewscanon = WARN, F 
log4j.category.com.lewscanon.mouser = DEBUG, X 

sagen Sie folgendes:

  • Log alles an appender A (das ist Konsole). Loggen Sie nur Warnungen und über
  • Loggen Sie alles von com.lewscanon Paket zu Appender F (die Datei lewscanon.log geht). Loggen Sie nur Warnungen und über
  • Log alles von com.lewscannon.mouser Paket zu appender X (die Datei mouser.log geht). Nur Debug-Protokoll und über

Es ist auch möglich, die volle Klassennamen zu liefern:

log4j.category.com.lewscanon.SomeClass = WARN, F 

Mittel log alles von com.lewscanon.SomeClass Klasse F bis appender, Ebene warnen und darüber.

nehme ich die oben granulare genug ist, aber wenn Sie unbedingt brauchen sie mehr granulare (ich glaube nicht, dass praktisch genug ist, obwohl), pro:

Logger.getLogger(String name) akzeptiert Namen. So können Sie so etwas wie:

log4j.category.myFancyLogger = INFO, F 

und verwenden Logger.getLogger("myFancyLogger") die Logger zu erhalten, die F mit Leveln Info zu Appen protokolliert.

+0

Ich schaute auf Ihren Link. Aber wie kann ich den Speicherort des Protokolls ändern? Ich meine, ich möchte eine log4j-Instanz verwenden, dann in einer Methode in eine Datei loggen, während ich in einer anderen Methode in einer anderen Datei logge. Irgendein Beispiel? – Kavin

+0

Siehe die Bearbeitung, hoffe, es ist granular genug. –

+0

Es funktioniert. Vielen Dank – Kavin