[logback-user] SMTPAppender mail not sent (logback 1.0.0, JDK 1.5)
Thorbjørn Ravn Andersen
thunderaxiom at hotmail.com
Mon Mar 12 13:52:54 CET 2012
Regarding the early exit code, I believe your runnables are too shortlived to prove anything here.
Try putting a 1-2 second delay in before the print statement to more accurately reflect that sending takes time.
I still would like just a "send synchroneous, please" option. Having the email sent is more important to us than an occasional slow log statement.
/Thorbjørn
-----Original Message-----
From: logback-user-bounces at qos.ch [mailto:logback-user-bounces at qos.ch] On Behalf Of ceki
Sent: 5. marts 2012 18:55
To: logback users list
Subject: Re: [logback-user] SMTPAppender mail not sent (logback 1.0.0, JDK 1.5)
Hi Endre,
I was not able to make headway regarding this issue. Several people suffer from it as attested by LBCLASSIC-323.
Regarding the early exit problem, the following code
import ch.qos.logback.core.Context;
import ch.qos.logback.core.ContextBase;
public class Main {
public static void main(String[] args) {
Context context = new ContextBase();
for(int i = 0; i < 3; i++) {
SenderRunnable senderRunnable = new SenderRunnable(""+i);
context.getExecutorService().execute(senderRunnable);
}
System.out.println("done");
System.exit(0);
}
static class SenderRunnable implements Runnable {
String id;
SenderRunnable(String id) {
this.id = id;
}
public void run() {
System.out.println("SenderRunnable " +id);
}
}
}
yields
done
SenderRunnable 0
SenderRunnable 1
SenderRunnable 2
I am continuing to investigate.
--
Ceki
http://twitter.com/#!/ceki
On 31.01.2012 13:35, Thorbjørn Ravn Andersen wrote:
> Hi.
>
> Just ran into this bug as well (Java 1.5, logback 1.0.0, Windows 7).
>
> It appears that the code in SMTPAppenderBase
>
> if (eventEvaluator.evaluate(eventObject)) {
> // perform actual sending asynchronously
> SenderRunnable senderRunnable = new SenderRunnable(new CyclicBuffer<E>(cb), eventObject);
> context.getExecutorService().execute(senderRunnable);
> }
>
> is properly executed, but as noted the SenderRunable.run() method is not invoked (which I have determined by having a break point).
>
> The ThreadPoolExecutor.execute() method (under Oracle Java 1.5) executes:
>
> public void execute(Runnable command) {
> if (command == null)
> throw new NullPointerException();
> for (;;) {
> if (runState != RUNNING) {
> reject(command);
> return;
> }
> if (poolSize< corePoolSize&& addIfUnderCorePoolSize(command))
> return;
> if (workQueue.offer(command))
> return;
>
> and returns (and the SenderRunnable was added to workQueue).
>
> There is, however, a potential problem of mails being lost. In the code causing me to investigate this, the "log.error("....", e)" is immediately followed by a System.exit(). In other words - I will most likely loose most of the mails generated by this code as the async process is slower than the System.exit().
>
> Is there any way of guaranteeing that all mail has been transported before stopping the program?
>
> If not, can I have a flag simply saying "do not run async, run in process" which invokes senderRunnable.run() directly instead of delegating to an executor?
>
> (also a way of telling the operator that mail has been sent would be nice. It can be as simple as a print statement, similar to
>
> @Override
> protected void sendBuffer(
> ch.qos.logback.core.helpers.CyclicBuffer<ILoggingEvent> cb,
> ILoggingEvent lastEventObject) {
>
> System.out.println("[" + new java.util.Date() + " "
> + this.getClass().getSimpleName()
> + " sending e-mail notification with " + cb.length()
> + " events]");
>
> super.sendBuffer(cb, lastEventObject);
> };
> )
>
> Thanks
>
> /Thorbjørn
>
> -----Original Message-----
> From: logback-user-bounces at qos.ch [mailto:logback-user-bounces at qos.ch] On Behalf Of ceki
> Sent: 29. januar 2012 18:49
> To: logback users list
> Subject: Re: [logback-user] SMTPAppender mail not sent (logback 1.0.0, JDK 1.5)
>
> Hi,
>
> I intend to look into this tomorrow morning.
>
> --
> Ceki
> http://twitter.com/#!/ceki
>
> On 29.01.2012 17:36, samyem wrote:
>>
>>
>> I am facing the exact same issue. The upgrade stopped sending emails
>> for me as well. For some reason, the Runnable class SMTPAppender's
>> "run" method never gets executed in this new version. Anyone else having this issue?
>>
>> Thanks,
>>
>>
>> Louis-Félix wrote:
>>>
>>> Hi,
>>>
>>> I upgraded to logback 1.0.0 in a web application (tomcat 5, JDK 1.5),
>>> and the ERROR email are not sent anymore from the SMTPAppender.
>>> When I rollback my logback-core and logback-classic JARs to version
>>> 0.9.30, it's working again.
>>>
>>> I have a simple config:
>>>
>>> <appender name="courriel"
>>> class="ch.qos.logback.classic.net.SMTPAppender">
>>> <smtpHost>smtp.xxx.xx.xx</smtpHost>
>>> <to>xxx at xxx.xx.xx</to>
>>> <from>no-reply.ti at xxx.xx.xx</from>
>>> <subject>Test</subject>
>>> <cyclicBufferTracker
>>> class="ch.qos.logback.core.spi.CyclicBufferTrackerImpl">
>>> <bufferSize>25</bufferSize>
>>> </cyclicBufferTracker>
>>> <layout class="ch.qos.logback.classic.html.HTMLLayout">
>>> <pattern>%date%level%thread%logger%line%message</pattern>
>>> </layout>
>>> </appender>
>>>
>>> I am using logback 1.0.0 with no problem in an other project (with
>>> JDK 1.6).
>>> Is there any known compatibility problem between logback 1.0.0 and
>>> JDK 1.5?
>>>
>>> Thanks,
>>> Louis-Félix
>>>
_______________________________________________
Logback-user mailing list
Logback-user at qos.ch
http://mailman.qos.ch/mailman/listinfo/logback-user
More information about the Logback-user
mailing list