PDA

View Full Version : [JAVA] Log4j - Smtpappender


altropinto
23-09-2009, 08:44
Salve a tuti,
ho un problema che non sto riuscendo a risolvere.
Vorrei tramite il log4j inviare una mail ogni qualvolta si presenta nel log un WARN (warning).
(Di default smtpappender invia una mail quando si presenta un livello ERROR o superiore).

Ho creato il file log4j.properties:

codice:

log4j.logger.servlet=WARN, mail
log4j.appender.mail=org.apache.log4j.net.SMTPAppender
log4j.appender.mail.threshold=WARN
log4j.appender.mail.BufferSize=1
log4j.appender.mail.SMTPHost=mail.libero.it
log4j.appender.mail.From=xxx@libero.it
log4j.appender.mail.To=xxx@libero.it
log4j.appender.mail.Subject=Log Tomcat
log4j.appender.mail.layout=org.apache.log4j.PatternLayout
log4j.appender.mail.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.appender.myMail.EvaluatorClass=MyEvaluator

MyEvaluator.java:

codice:

import org.apache.log4j.Level;
import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.spi.TriggeringEventEvaluator;

public class MyEvaluator implements TriggeringEventEvaluator
{
public boolean isTriggeringEvent( LoggingEvent event )
{
return event.getLevel().isGreaterOrEqual( Level.WARN );
}
}

Ho compilato questa classe ed ho creato pure un file jar MyEvaluator.jar contenete la classe.
Ho provato a copiare nella cartella lib di tomcat entrambi i file (sia il .class che il .jar) però niente, non funziona.

Vorrei sapere:
1) quale file devo utilizzare (.class o .jar) e
2) dove posizionarlo.

Ho provato a cercare su internet ma non ho trovato una risposta.

Qualcuno mi potrebbe aiutare??????

Ciao e grazie in anticipo

zulutown
23-09-2009, 10:31
non ho mai definito evaluator custom.. ma...

quando tu scrivi log4j.appender.myMail.EvaluatorClass=MyEvaluator non dovresti dare il path completo comprensivo di package della classe MyEvaluator? perchè metti myMail come appender quando invece l'appender che stai definendo è mail?

E infine.. non capisco perchè devi scriver tu l'evaluator.. di solito il livello di errore sul quale viene inviata la email viene preso dalla configurazione del log4j...

altropinto
23-09-2009, 10:49
Per quanto riguarda myMail è stato un errore di trascrizione.
Voglio scrivere io l'evaluator perchè voglio inviare mail anche in caso di solo warning.

Adesso pure che aggiungo il package, cosa devo mettere ????dove devo mettere???devo fare un jar???o devo utilizzarre il file.class???
e poi dove li devo mettere???in che cartella???

og4j.appender.mail.evaluatorClass=com.millersystems.example.spi.MyEvaluator

MyEvaluator.java:

codice:
package com.millersystems.example.spi;
import org.apache.log4j.Level;
import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.spi.TriggeringEventEvaluator;

public class MyEvaluator implements TriggeringEventEvaluator
{
public boolean isTriggeringEvent( LoggingEvent event )
{
return event.getLevel().isGreaterOrEqual( Level.WARN );
}
}

zulutown
23-09-2009, 14:55
Per quanto riguarda myMail è stato un errore di trascrizione.
Voglio scrivere io l'evaluator perchè voglio inviare mail anche in caso di solo warning.

Adesso pure che aggiungo il package, cosa devo mettere ????dove devo mettere???devo fare un jar???o devo utilizzarre il file.class???
e poi dove li devo mettere???in che cartella???

og4j.appender.mail.evaluatorClass=com.millersystems.example.spi.MyEvaluator

MyEvaluator.java:

codice:
package com.millersystems.example.spi;
import org.apache.log4j.Level;
import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.spi.TriggeringEventEvaluator;

public class MyEvaluator implements TriggeringEventEvaluator
{
public boolean isTriggeringEvent( LoggingEvent event )
{
return event.getLevel().isGreaterOrEqual( Level.WARN );
}
}

secondo me senza che tu definisci nessun tuo evaluator già puoi far quello che ti serve configurando in modo opportuno log4j..
in log4j è possibile dire che determinate alberature di package vengano loggate con un livello di errore ben specificato su determinati appender..

secondo me il fatto che l'smtpappender non ti logga i warn dipende da un problema di come l'hai configurato..

http://en.wikipedia.org/wiki/Log4j