[logback-user] SMTPAppender with level WARN?

Joop Vriend joop.vriend at ddnh.nl
Mon Oct 20 22:56:19 CEST 2008


Hello Ceki,

Thanks a lot for the very quick reply!

You were right: the output contained an ERROR: 'Mandatory "name" 
attribute not set for <evaluator>'.

The name-attribute is *not* mentioned in your CounterBasedEvaluator 
example in your Appender documentation:

http://logback.qos.ch/manual/appenders.html#SMTPAppender

And I couldn't find a XSD- or a DTD-file for the logback configuration.

Now I added the name-attribute, but I get a different ERROR:

Evaluator of type [packagename.AlwaysTrueEvaluator] is not of the 
desired type

Again, I based my code on your CounterBasedEvaluator example. Any ideas?

Thanks again, Joop.


On 10/20/2008 10:16 PM, Ceki Gulcu wrote:
> Hello Joop,
> 
> Just after creating a/any logger, invoke the following method
> 
> LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
> StatusPrinter.print(lc);
> 
> I *bet* the output will tell you went wrong.
> 
> HTH,
> 
> 
> Joop Vriend wrote:
>> Hi,
>>
>> I'm trying to configure logback with an SMTPAppender that mails *every*
>> log message of level WARN or higher, but I can't get it working.
>>
>> I've tried to use a (Threshold)filter, but that didn't work. (Why can't
>> you just use filters with SMTPAppender?!?)
>>
>> I've tried to use an EvaluatorFilter with an expression 'level >= WARN',
>> but that didn't work either.
>>
>> Now I'm trying to use a custom evaluator, but still can't get it
>> working... :-(  Level ERROR is being e-mailed, but other levels not.
>> For testing purposes I (even) wrote a custom evaluator-class that always
>> returns 'true' in it's evaluate()-method:
>>
>>
>> public class AlwaysTrueEvaluator extends ContextAwareBase implements
>> EventEvaluator
>> {
>>    String  name;
>>    boolean started;
>>
>>
>>    public boolean evaluate(Object event) throws NullPointerException,
>> EvaluationException
>>    {
>>      return true;
>>    }
>>
>>
>>    public void setName(String name)
>>    {
>>      this.name = name;
>>    }
>>
>>
>>    public String getName()
>>    {
>>      return name;
>>    }
>>
>>
>>    public boolean isStarted()
>>    {
>>      return started;
>>    }
>>
>>
>>    public void start()
>>    {
>>      started = true;
>>    }
>>
>>
>>    public void stop()
>>    {
>>      started = false;
>>    }
>>
>> }
>>
>>
>>
>> This is my logback.xml file:
>>
>>
>> <configuration>
>>
>>    <appender name="RootFileAppender"
>> class="ch.qos.logback.core.rolling.RollingFileAppender">
>>      <append>true</append>
>>      <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
>>        <level>debug</level>
>>      </filter>
>>      <rollingPolicy
>> class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
>>
>> <fileNamePattern>${catalina.base}/logs/logback-root.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
>>      </rollingPolicy>
>>      <layout class="ch.qos.logback.classic.PatternLayout">
>>        <pattern>%date{yyyy-MM-dd HH:mm:ss}  %class %method
>> \(%file:%line\)%n  %level: %message%n</pattern>
>>      </layout>
>>    </appender>
>>
>>    <appender name="RootEmailAppender"
>> class="ch.qos.logback.classic.net.SMTPAppender">
>>      <bufferSize>1</bufferSize>
>>      <SMTPHost>_SMTP_HOST_</SMTPHost>
>>      <to>_TO_ADDRESS_</to>
>>      <from>_FROM_ADDRESS_</from>
>>      <subject>logback logrecord</subject>
>>      <layout class="ch.qos.logback.classic.PatternLayout">
>>        <pattern>%date{yyyy-MM-dd HH:mm:ss}  %class %method
>> \(%file:%line\)%n  %level: %message%n</pattern>
>>      </layout>
>>      <evaluator class="packagename.AlwaysTrueEvaluator"/>
>>    </appender>
>>
>>    <root>
>>      <level value ="debug"/>
>>      <appender-ref ref="RootFileAppender"/>
>>      <appender-ref ref="RootEmailAppender"/>
>>    </root>
>>
>> </configuration>
>>
>>
>> I'm using logback 0.9.9 with slf4j 1.5.5 on Tomcat 6.0.
>>
>> Any help is greatly appreciated!
>>
>> Kind regards, Joop Vriend.
>>


More information about the Logback-user mailing list