You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-user@logging.apache.org by "S.Kannan" <te...@yahoo.co.in> on 2009/11/06 09:14:01 UTC

Using two SMTPAppenders

Hi All
There seems to be some trouble configuring two Appenders for sending mails.
In our case we have to define two custom levels and send mails when these
two levels are used for logging.
The following is the custom level class(Since we want both the levels to be
equal something more than FATAL)

public class CustomLevel extends Level {

	// Defining SUCCESS constants
	public static final int SUCCESS_INT = 60000;
	public static final String SUCCESS_STRING = "SUCCESS";
	public static final Level SUCCESS = new CustomLevel (SUCCESS_INT,
			SUCCESS_STRING, 0);
	// Defining FAILURE constants
	public static final int FAILURE_INT = 60000;
	public static final String FAILURE_STRING = "FAILURE";
	public static final Level FAILURE = new CustomLevel (FAILURE_INT,
			FAILURE_STRING, 0);
	
	public CustomLevel (int intValue, String levelName, int sysLogEquivalent) {
		super(intValue, levelName, sysLogEquivalent);
	}
		
}

As the default level for mail triggering is ERROR i modified the
log.properties file like the below one

log4j.rootLogger=ALL,DEBUG_APPENDER,....,SUCCESS_APPENDER,FAILURE_APPENDER

log4j.appender.SUCCESS_APPENDER=org.abc.util.MyOwnSmtpAppender
log4j.appender.SUCCESS_APPENDER.BufferSize=1
log4j.appender.SUCCESS_APPENDER.From=noreply@mycomp.int
log4j.appender.SUCCESS_APPENDER.To=kannan.s@mycomp.int 
log4j.appender.SUCCESS_APPENDER.Cc=kannan.s@mycomp.int
log4j.appender.SUCCESS_APPENDER.Subject=Tour
log4j.appender.SUCCESS_APPENDER.evaluatorClass=org.abc.util.AbcEventEvaluator
log4j.appender.SUCCESS_APPENDER.Threshold=SUCCESS#org.abc.util.CustomLevel
log4j.appender.SUCCESS_APPENDER.SMTPHost=localhost
log4j.appender.SUCCESS_APPENDER.layout=org.apache.log4j.PatternLayout
log4j.appender.SUCCESS_APPENDER.layout.ConversionPattern=%d [%t] %-5p %c -
%m%n


log4j.appender.FAILURE_APPENDER=org.abc.util.MyOwnSmtpAppender
log4j.appender.FAILURE_APPENDER.BufferSize=1
log4j.appender.FAILURE_APPENDER.From=noreply@mycomp.int
log4j.appender.FAILURE_APPENDER.To=Kannan@mycomp.int 
log4j.appender.FAILURE_APPENDER.Cc=Skannan@mycomp.int
log4j.appender.FAILURE_APPENDER.evaluatorClass=org.abc.util.AbcEventEvaluator
log4j.appender.FAILURE_APPENDER.Threshold=FAILURE#org.abc.util.CustomLevel
log4j.appender.FAILURE_APPENDER.SMTPHost=localhost
log4j.appender.FAILURE_APPENDER.Subject=Log4J Mail Failure
log4j.appender.FAILURE_APPENDER.layout=org.apache.log4j.PatternLayout
log4j.appender.FAILURE_APPENDER.layout.ConversionPattern=%d [%t] %-5p %c -
%m%n


The AbcEventEvaluatorclass is as follows

public class AbcEventEvaluatorimplements TriggeringEventEvaluator {

	@Override
	public boolean isTriggeringEvent(LoggingEvent event) {
		System.out.println("Trigerring event Level:"+event.getLevel());
		boolean isTriggered = false;
		if (event.getLevel().equals(CustomLevel.SUCCESS)) {
			isTriggered = true;
			System.out.println("isTriggeringEvent SUCCESS ");
		}else if (event.getLevel().equals(CustomLevel.FAILURE)){
			isTriggered = true;
			System.out.println("isTriggeringEvent FAILURE ");
		} 
		return isTriggered;
	}

}


The customized appender is 

public class MyOwnSmtpAppender extends SMTPAppender{

	@Override
	public void setEvaluatorClass(String arg0) {
		// TODO Auto-generated method stub
		System.out.println("Setting the evaluator class:"+arg0);
		super.setEvaluatorClass(arg0);
	}
	
	@Override
	public String getEvaluatorClass() {
		// TODO Auto-generated method stub
		return super.getEvaluatorClass();
	}
	
	@Override
	public void setThreshold(Priority threshold) {
		// TODO Auto-generated method stub
		System.out.println("Setting the
threshold"+threshold.getSyslogEquivalent());
		super.setThreshold(threshold);
	}
	
	@Override
	public Priority getThreshold() {
		// TODO Auto-generated method stub
		return super.getThreshold();
	}
	
	
	
}


Now the problem is that i get two mails both from the success level and the
failure level when we just log for only success messages.

11/6/09 1:25 PM  Tour
11/6/09 1:25 PM  Log4J Mail Failure

Please give some suggestions

-- 
View this message in context: http://old.nabble.com/Using-two-SMTPAppenders-tp26228079p26228079.html
Sent from the Log4j - Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org


AW: Using two SMTPAppenders

Posted by Bender Heri <hb...@ergonomics.ch>.
First what I notice is the same int value of your custom levels (both have 60000).
But: Why that complicated? Why not only define two separate loggers by name, a "SuccessLogger" and a "FailLogger"? The places where one of these loggers are called know about the success or the failure (your solution has to set the correct level, my solution only fetch the correct logger)
Heri

-----Ursprüngliche Nachricht-----
Von: S.Kannan [mailto:techy_kans@yahoo.co.in] 
Gesendet: Freitag, 6. November 2009 09:14
An: log4j-user@logging.apache.org
Betreff: Using two SMTPAppenders


Hi All
There seems to be some trouble configuring two Appenders for sending mails.
In our case we have to define two custom levels and send mails when these two levels are used for logging.
The following is the custom level class(Since we want both the levels to be equal something more than FATAL)

public class CustomLevel extends Level {

	// Defining SUCCESS constants
	public static final int SUCCESS_INT = 60000;
	public static final String SUCCESS_STRING = "SUCCESS";
	public static final Level SUCCESS = new CustomLevel (SUCCESS_INT,
			SUCCESS_STRING, 0);
	// Defining FAILURE constants
	public static final int FAILURE_INT = 60000;
	public static final String FAILURE_STRING = "FAILURE";
	public static final Level FAILURE = new CustomLevel (FAILURE_INT,
			FAILURE_STRING, 0);
	
	public CustomLevel (int intValue, String levelName, int sysLogEquivalent) {
		super(intValue, levelName, sysLogEquivalent);
	}
		
}

As the default level for mail triggering is ERROR i modified the log.properties file like the below one

log4j.rootLogger=ALL,DEBUG_APPENDER,....,SUCCESS_APPENDER,FAILURE_APPENDER

log4j.appender.SUCCESS_APPENDER=org.abc.util.MyOwnSmtpAppender
log4j.appender.SUCCESS_APPENDER.BufferSize=1
log4j.appender.SUCCESS_APPENDER.From=noreply@mycomp.int
log4j.appender.SUCCESS_APPENDER.To=kannan.s@mycomp.int
log4j.appender.SUCCESS_APPENDER.Cc=kannan.s@mycomp.int
log4j.appender.SUCCESS_APPENDER.Subject=Tour
log4j.appender.SUCCESS_APPENDER.evaluatorClass=org.abc.util.AbcEventEvaluator
log4j.appender.SUCCESS_APPENDER.Threshold=SUCCESS#org.abc.util.CustomLevel
log4j.appender.SUCCESS_APPENDER.SMTPHost=localhost
log4j.appender.SUCCESS_APPENDER.layout=org.apache.log4j.PatternLayout
log4j.appender.SUCCESS_APPENDER.layout.ConversionPattern=%d [%t] %-5p %c - %m%n


log4j.appender.FAILURE_APPENDER=org.abc.util.MyOwnSmtpAppender
log4j.appender.FAILURE_APPENDER.BufferSize=1
log4j.appender.FAILURE_APPENDER.From=noreply@mycomp.int
log4j.appender.FAILURE_APPENDER.To=Kannan@mycomp.int 
log4j.appender.FAILURE_APPENDER.Cc=Skannan@mycomp.int
log4j.appender.FAILURE_APPENDER.evaluatorClass=org.abc.util.AbcEventEvaluator
log4j.appender.FAILURE_APPENDER.Threshold=FAILURE#org.abc.util.CustomLevel
log4j.appender.FAILURE_APPENDER.SMTPHost=localhost
log4j.appender.FAILURE_APPENDER.Subject=Log4J Mail Failure
log4j.appender.FAILURE_APPENDER.layout=org.apache.log4j.PatternLayout
log4j.appender.FAILURE_APPENDER.layout.ConversionPattern=%d [%t] %-5p %c -
%m%n


The AbcEventEvaluatorclass is as follows

public class AbcEventEvaluatorimplements TriggeringEventEvaluator {

	@Override
	public boolean isTriggeringEvent(LoggingEvent event) {
		System.out.println("Trigerring event Level:"+event.getLevel());
		boolean isTriggered = false;
		if (event.getLevel().equals(CustomLevel.SUCCESS)) {
			isTriggered = true;
			System.out.println("isTriggeringEvent SUCCESS ");
		}else if (event.getLevel().equals(CustomLevel.FAILURE)){
			isTriggered = true;
			System.out.println("isTriggeringEvent FAILURE ");
		} 
		return isTriggered;
	}

}


The customized appender is 

public class MyOwnSmtpAppender extends SMTPAppender{

	@Override
	public void setEvaluatorClass(String arg0) {
		// TODO Auto-generated method stub
		System.out.println("Setting the evaluator class:"+arg0);
		super.setEvaluatorClass(arg0);
	}
	
	@Override
	public String getEvaluatorClass() {
		// TODO Auto-generated method stub
		return super.getEvaluatorClass();
	}
	
	@Override
	public void setThreshold(Priority threshold) {
		// TODO Auto-generated method stub
		System.out.println("Setting the
threshold"+threshold.getSyslogEquivalent());
		super.setThreshold(threshold);
	}
	
	@Override
	public Priority getThreshold() {
		// TODO Auto-generated method stub
		return super.getThreshold();
	}
	
	
	
}


Now the problem is that i get two mails both from the success level and the
failure level when we just log for only success messages.

11/6/09 1:25 PM  Tour
11/6/09 1:25 PM  Log4J Mail Failure

Please give some suggestions

-- 
View this message in context: http://old.nabble.com/Using-two-SMTPAppenders-tp26228079p26228079.html
Sent from the Log4j - Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org