2016-04-28 7 views
-3

ich eine Java-Anwendung, die drei Objekte ‚hypotetically sprechen ‘ hat ... 1 der Klasse Tier, 1 der Klasse Lebensmittel, sind solche, die nicht durch eine Erbschaft oder Schnittstelle im Zusammenhang ..und ein letzter der Klasse-Manager weicht eine Liste von Tieren, und die Liste der Lebensmittel wird mit, ist der Manager verantwortlich für einen Zoo, in dem die Tiere und Lebensmittel sind ..Log4j selektive appender

auf den Punkt ...

Bin mit log4j und I n eed to log auf die a txt-Datei IF ONLY AND ONLY Wenn etwas in der Tierliste ändert ... (Tier stirbt, Borns oder was auch immer ...) und ich brauche log auf die System.out IF UND ONLY IF etwas in den Änderungen Lebensmittel Liste ... (neue Nahrung notwendig ist, wurde gegessen, was auch immer ...)

Meine Frage:

Wie kann ich mit log4j das tun?

Ich habe hier gefunden: Log4j : Creating/Modifying appenders at runtime, log file recreated and not appended

etwas wie dynamisch die appender Ändern

String targetLog="where ever you want your log" 
FileAppender apndr = new FileAppender(new PatternLayout("%d %-5p [%c{1}] %m%n"),targetLog,true);  
logger.addAppender(apndr); 
logger.setLevel((Level) Level.ALL); 

aber ich denke, das ist sehr hässlich und Fehler anfällig ist den appender ständig überall auf der Loch-Anwendung hinzuzufügen und zu entfernen ..

Gibt es eine bessere Möglichkeit, dies zu handhaben kann ich 2 Logger haben (eins für Tiere 1 für die Lebensmittel)??

ein Vorschlag?

Dank

Antwort

0

Dies ist, wie ich es an die Arbeit:

Konfiguration der Eigenschaften

log4j.rootLogger=TRACE, stdout 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d [%5F:%t:%L] - %m%n 

log4j.appender.animalLogger=org.apache.log4j.FileAppender 
log4j.appender.animalLogger.File=animal.log 
log4j.appender.animalLogger.layout=org.apache.log4j.PatternLayout 
log4j.appender.animalLogger.layout.ConversionPattern=%d [%5F:%t:%L] - %m%n 

log4j.category.animalLogger=DEBUG, animalLogger 
log4j.additivity.animalLogger=false 

log4j.category.foodlLogger=DEBUG, stdout 
log4j.additivity.foodlLogger=false 

static final Logger animalLogger = Logger.getLogger("animalLogger"); 
static final Logger foodlLogger = Logger.getLogger("foodlLogger"); 

und den Logger und Protokollierung zu laden:

public static void main(String[] args) { 
    PropertyConfigurator.configure("log4j.properties"); 
    animalLogger.debug("Hello animalLogger message"); 
    foodlLogger.debug("Hello reportsLog message"); 
} 
0

Sie können dies von der Konfiguration in der Datei log4j.xml streng tun. Sie können zwei Appender darin definieren und dann zwei Logger-Elemente haben, eines, das Tiere an den ersten Appender bindet und eines, das das Futter an einen anderen Appender bindet. Wahrscheinlich sollten Sie auch ein Element haben, um das Standardverhalten zu definieren.