2016-06-22 6 views
0

Ich möchte eine Mail-Benachrichtigung in einer Java-Anwendung über log4j senden. Der erste Versuch mit der konfigurierten log4j.properties-Datei funktionierte jedoch wie ein Zauber. Aber da ich ein dynamisches Thema will, die in der Laufzeit erzeugt wird, habe ich versucht, die folgenden Befehle ein, ohne Erfolg:Log4J SMTPAppender Java

final static Logger logger = Logger.getRootLogger(); 

... 

public static mail(String msg, String subj) { 

    SMTPAppender mailAppend = new SMTPAppender(); 
    mailAppend.setBufferSize(3); 
    mailAppend.setSMTPHost("smtphostname"); 
    mailAppend.setTo("[email protected]"); 
    mailAppend.setSubject(subj); 
    logger.addAppender(mailAppend); 
    logger.error(msg); 
} 

Ausgang:

log4j:ERROR Message object not configured. 

So habe ich verpasst einen notwendigen Getter?

+0

Warum [Javamail-API] nicht (https://java.net/projects/javamail/pages/Home)? – Fildor

+0

In der Anwendung verwende ich bereits Dateiprotokollierung über log4j für Trace und so weiter, so dass ich die einfachste Möglichkeit der Implementierung einer zusätzlichen ausgehenden Mail bei einem höheren prio dann verfolgen. – bhlx

+0

Versuchen Sie also, Warnungen oder Fehlermeldungen zu senden? Wenn ja, würde ich einen speziellen Logger verwenden, nicht den Root-Logger selbst. Dann würde ich den Appender modifizieren, um das Thema zu wechseln, und nicht immer wieder ein neues hinzufügen. Wenn die Mails nichts mit Fehler/Logging zu tun haben, würde ich eine andere Mail-Lib verwenden. – Fildor

Antwort

0

Ein SMTPAppender kann entweder mit einer XML-Datei oder mit den Eigenschaften oder manuell mit den Setter konfiguriert werden. Wenn Sie die Setter verwenden, benötigen Sie , um die Optionen zu aktivieren, indem Sie die Funktion activateOptions oder aufrufen. Andernfalls erhalten Sie die Meldung "FEHLER Nachrichtenobjekt nicht konfiguriert". Damit wird sichergestellt, dass die Optionen nur dann wirksam werden, wenn alle zugehörigen Optionen festgelegt wurden (z. B. möchte man nicht, dass die Hosteinstellung wirksam wird, bevor der Port festgelegt wird).

AB: https://community.oracle.com/thread/1758275?start=0&tstart=0

+0

Ty, ich habe es versucht und es funktioniert wie beschrieben. Gefunden eine andere Lösung, die ich teilen möchte. Sie können einfach mit einer Wild Card arbeiten: so in log4j.properties: log4j.appender.email.Subject = $ {} mail.subject und in Java System.setProperty ("mail.subject", insert_subject_here); org.apache.log4j.LogManager.resetConfiguration(); PropertyConfigurator.configure ("/ link/to/log4j.properties"); Danach können Sie einfach einen Fehler mit aktualisierten Betreff protokollieren. – bhlx

+0

@bhlx Sicher, Sie können eine Antwort auf Ihre eigene Frage hinzufügen. – Fildor