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: [email protected] [mailto:[email protected]] 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: [email protected] [mailto:[email protected]] 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>[email protected]</to> >>> <from>[email protected]</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 [email protected] http://mailman.qos.ch/mailman/listinfo/logback-user _______________________________________________ Logback-user mailing list [email protected] http://mailman.qos.ch/mailman/listinfo/logback-user
