habe das problem dass ich einen teil meines smtp-appenders im file log4j.xml definieren will, der rest über ein properties-file.
nun müsste ich (auf java-ebene) auf den im xml-file definierten appender referenzieren. hoffe, dass ich da nicht extra einen parser schreiben muss, die xml-konfigurationsdaten wurde ja bereits der log4j-engine übergeben...
...unter dem kommenar <!-- NOT HERE !!! --> siehst du die parameter, welche ich per properties-file konfigurieren will. und nein, nicht über das properties-file von log4j, auch will ich kein properties-file im classpath haben und mit getResource(...) oder so darauf zugreifen...
die fertig deployte applikation hat dann auf der gleichen verzeichnisebene wie sich das jar befindet ein properties-file namens "OrderImportTool.prop", und das ist dafür gedacht, dass es vom endanwender angepasst wird.
kurz gesagt:
- volatile konfigurationsdaten (u.a. die 4 parameter für den SMTPAppender) -> OrderImportTool.prop
- (quasi) konstante log4j konfigurationsdaten -> log4j.xml
XML und Property Konfigurationen für Log4J sind gleichwertig (naja, XMl bietet etwas mehr flexibität), es gibt keinen vernünftigen Grund beides gleichzeitig einzusetzen IMHO.
DOMConfigurator bietet eine configureAndWatch Methode, d.h. XML + Java sollten reichen.
1. volatile konfigurationsdaten (u.a. die 4 parameter für den SMTPAppender) -> OrderImportTool.prop
2. (quasi) konstante log4j konfigurationsdaten -> log4j.xml
zu punkt 1: die volatilen konfigurationdaten sollen ganz einfach von endbenutzer anpassbar sein. (was ein log4j.xml mit ALLEN parametern im classpath im GEPACKTEN jar defintiv ausschliesst...)
zu punkt 2: wenn ich alle parameter (z.b. "EvaluatorClass") im properties-file definieren würde, würde das den endbenutzer eher verwirren. des weiteren müsste das in der endbenutzerdokumentation dokumentiert werden... deshalb sind diese in der log4j.xml...
meiner meinung nach ist das optimal für den enduser... aber was soll's, geschmäcker sind verschieden, und viele wege führen nach rom...
log4j kann doch mit Platzhaltern wie ${bla.blubb} umgehen. Wenn dann zur Laufzeit das Systemproperty bla.blubb gesetzt ist (im Moment der Konfiguration), dann wird das entsprechend eingesetzt.
Das sollte reichen...