Java Log4j Threshold

pharao01

Newbie
Registriert
Aug. 2004
Beiträge
6
Hallo,

ich weis nicht ob ich blöd bin, aber ich spiele mich schon ein paar Stunden mit dem Thema.
Und zwar geht es darum, dass ich ein paar Appender habe die alle ab einem bestimmten Threshold was loggen sollen.
Das geht beim Console Appender und beim File Appender auch perfekt. Wenn ich hier den Threshold verstelle bekomme ich immer nur die Messages die ich auch haben will.

Aber nicht so beim SMTP Appender. Und zwar will ich alle Messages per Mail haben ab dem warn level. Wenn ich das so einstelle bekomme ich einfach keine Mail. Das witzige ist wenn ich den Threshold auf error stelle und auch dann die log Message auf error umstelle geht es.

Hier einmal meine Konfig:

Code:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
	<appender name="MyDailyRollingFileAppender" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="datePattern" value="'.'yyyy-MM-dd" />
		<param name="File" value="Error.log" />
		<param name="Threshold" value="info"/>
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern"
				value="%d{ABSOLUTE} %5p [%t] %c{1}:%L - %m%n" />
		</layout>
	</appender>
	<appender name="MyMailAppender" class="org.apache.log4j.net.SMTPAppender">
		<param name="SMTPHost" value="10.10.10.10" />
		<param name="From" value="xxx@xxx.com" ></param>
		<param name="To" value="xxx@xxx.com" ></param>
		<param name="Subject" value="Example Message" />
		<param name="BufferSize" value="1" />
		[COLOR="Red"]<param name="Threshold" value="warn" />[/COLOR]
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern"
				value="%d{ABSOLUTE} %5p [%t] %c{1}:%L - %m%n" />
		</layout>
	</appender>
	<appender name="MyConsoleAppender" class="org.apache.log4j.ConsoleAppender">
	    <param name="Threshold" value="all"/>
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d{ABSOLUTE} %5p [%t] %c{1}:%L - %m%n"/>
		</layout>
	</appender>
	<root>
		<priority value="debug"></priority>
		<appender-ref ref="MyDailyRollingFileAppender" />
		<appender-ref ref="MyMailAppender"/>
		<appender-ref ref="MyConsoleAppender"/>
	</root>
</log4j:configuration>

So wie es einfach aussieht will der SMTPAppender nur Messages verschicken die >= Error sind. Wenn ich die Message auf FATAL umstelle geht es auch.

Vielleicht hat einer von euch eine Idee was ich da falsch mache?

Danke,
Lg
 
Das liegt an dem TriggeringEventEvaluator. log4j verwendet hier den DefaultEvaluator(). Dieser sendet nur dann den Bufferinhalt, wenn ein Logereignis mit Level >= Error erfolgt. Du musst also einen eigenen TriggeringEventEvaluator schreiben, der bereits bei Level = Warn den Mailversand aktiviert, um die Mails direkt zu erhalten. Sonst werden die Warn Events solange gepuffert, bis ein Error Event eintrifft.

Du verwendest zur Zeit auch Buffersize = 1. Der Buffer wird zyklisch gefüllt, d.h. Events, die nicht versendet werden, werden durch neue überschrieben.

Setze mal Buffersize = 10. Dann erzeuge 2-3 Warn Events, dann einen Error. Die Warnings müssten dann (bei Einsatz des DefaultEvaluator) zusammen mit dem Error versendet werden.
 
Zurück
Oben