Hallo Forum
Seit einigen Stunden versuche ich nun aus einem JavaAgent eine Log-Datei auf meine Festplatte zu schreiben. Während der Entwicklung starte ich den Agent manuell. Später läuft der Agent getriggert auf dem Domino-Server und soll selbstverständlich auch da ein Log-File schreiben.
public class SMCTest extends AgentBase {
private static final Logger logger = Logger.getLogger(SMCTest.class);
public void NotesMain() {
try {
logger.trace("Ich bin eine Trace Message");
logger.debug("Ich bin die Debug-Message");
logger.info("Ich bin eine Information");
logger.warn("Ich bin eine Warnung");
logger.error("Ich bin ein Error");
logger.fatal("Ich bin ein fataler Fehler");
} catch {
}
}
}
Was klappt: Wenn ich die Konfigruation innerhalb des Agents vornehme wird ein Log-File auf der Platte angelegt
Sobald ich aber versuche die Konfiguration in die log4j.properties zu delegieren passiert gar nichts mehr. Ich habe sowohl einen Appender für ein Log-File als auch für die Console erstellt.
# Verzeichnis der Applikationlogs (Standard Loglaufwerk F:)
logDir = Z:/Java/Logs
#-- SMC Logger SMCLOG
log4j.logger.ch.ebex.ext.smc.test=DEBUG, SMCLOG
log4j.additivity.ch.ebex.ext.smc.test=false
#FileApp -- SMCLOG for smc.log is set to be a RollingFileAppender ------
log4j.appender.SMCLOG=org.apache.log4j.RollingFileAppender
log4j.appender.SMCLOG.File=${logDir}/SMC/smc.log
log4j.appender.SMCLOG.MaxFileSize=5000KB
log4j.appender.SMCLOG.MaxBackupIndex=5
log4j.appender.SMCLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SMCLOG.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
#ConsoleApp -- SMCLOGCON for smc.log is set to be a ConsoleAppender ------
log4j.appender.SMCLOGCON=org.apache.log4j.ConsoleAppender
log4j.appender.SMCLOGCON.layout=org.apache.log4j.PatternLayout
log4j.appender.SMCLOGCON.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
Meine Fragen:
- In welches Verzeichnis muss das log4j.properties File abgelegt werden, damit es gefunden wird?
- Muss ich irgendwelche zusätzliche (notes-spezifische) Konfigurationen im log4j.properties vornehmen?
- Muss ich sonst noch etwas beachten?
Ich bin leider mit meinem Latein am Ende. :-[
Grüsse und vielen Dank für jeden Tipp
Hampa
Das Problem hat sich dahingehend entschärft, da ich jetzt zumindest ein Log-File schreiben kann. Ich habe es aber bloss zum Laufen gebracht indem ich das log4j.properties File innerhalb des Notes-Agents öffne.
public class SMCTest extends AgentBase {
......
private Logger logger;
public void NotesMain() {
PropertyConfigurator.configure("Z:/lotus8/notes/jvm/lib/ext/log4j.properties");
logger = Logger.getLogger("SMCTest");
...
}
}
Was nicht wirklich schön ist, da ich mich jetzt noch um einen Pfad mehr kümmern respektive verwalten muss, da dieser natürlich auf meiner lokalen Maschine nicht dem auf dem Dev-Server und auch nicht dem auf dem Produktions-Server entspricht.
Jetzt suche ich bloss noch eine Möglichkeit, wie ich das "./jvm/lib/ext/" Verzeichnis innerhalb des Agents auslesen kann um mir den Verwaltungsaufwand der verschiedenen Pfade zu ersparen.
Oder eben ganz generell. Dem Domino irgendwie mitteilen zu können, dass er im Verzeichnis ./jvm/lib/ext nach der log4j.properties Datei suchen soll.
Tipps? Immer gerne. ;)