[logback-user] Hang with SMTPAppender

Ceki Gülcü ceki at qos.ch
Fri Jul 23 17:22:27 CEST 2010


The line numbers in the stack trace you sent indicate an earlier version 
of logback, probably version 0.9.20 or 0.9.21.

In the past we also ran into problems while testing SMTPAppender with 
SubethaSMTP. If my memory serves me correctly, it was due to a race 
condition. Maybe the server is shutdown before SMTPAppender has a chance 
to receive the response of the server.

On 23/07/2010 4:54 PM, Jeff Jensen wrote:
> Using Logback 0.9.24 and SLF4J 1.6.1.
>
> I'm trying to resolve a hang problem with the
> ch.qos.logback.classic.net.SMTPAppender in an integration test and using
> SubethaSMTP as the email server.  We have many tests working with
> SubethaSMTP that send emails, but not with Logback, so I know it works
> for the non-Logback configuration.  I've also seen SMTPAppender work in
> a different situation to the production email server.  So I think I have
> a config error somewhere with Logback setup to SubethaSMTP, but not sure
> what, or there is an issue in the LB & SS interaction.
>
> This is the SMTPAppender config:
>
> <appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
> <layout class="ch.qos.logback.classic.html.HTMLLayout">
> <pattern>%date%contextName%thread%-5level%-55logger{55}%mdc%marker%msg</pattern>
>
> <throwableRenderer
> class="ch.qos.logback.classic.html.DefaultThrowableRenderer" />
> </layout>
> <SMTPHost>${mail.host.name}</SMTPHost>
> <SMTPPort>${mail.port.number}</SMTPPort>
> <From>${batch.email.address.from}</From>
> <To>${batch.email.address.to.cmrdevelopers}</To>
> <Subject>${batch.email.subject.prefix}Log Email: %msg</Subject>
> <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
> <marker>EMAIL_DEVS</marker>
> </evaluator>
> </appender>
>
>
> It hangs on call to SocketInputStream.socketRead0(), which is a native
> method.  Anyone seen/solved this before?
>
> The timeout value is 0 on the socket read (means wait forever), so it is
> waiting for a response to read.
>
>
>
> While I'm trying to resolve this, one thing I'd like to do is set the
> timeout value so at least it doesn't hang.  I'm not sure how to do that
> with SMTPAppender -
> anyone know how?  The SMTPAppender/SMTPAppenderBase class does not
> have a timeout property, but SMTPAppenderBase does pull system
> properties.  I'm hoping there is a config file-based approach to do this
> though...
>
>
>
>
> The following is a call stack captured in the Eclipse debugger; the next
> line-step would go into socketRead0() and hang.
>
>      org.eclipse.jdt.internal.junit.runner.RemoteTestRunner at
> localhost:3598
>          Thread [main] (Suspended)
>              SocketInputStream.read(byte[], int, int) line: 129
>              TraceInputStream.read(byte[], int, int) line: 97
>              BufferedInputStream.fill() line: 218
>              BufferedInputStream.read() line: 237
>              LineInputStream.readLine() line: 75
>              SMTPTransport.readServerResponse() line: 1440
>              SMTPTransport.openServer(String, int) line: 1260
>              SMTPTransport.protocolConnect(String, int, String, String)
> line: 370
>              SMTPTransport(Service).connect(String, int, String, String)
> line: 275
>              SMTPTransport(Service).connect(String, String, String)
> line: 156
>              SMTPTransport(Service).connect() line: 105
>              Transport.send0(Message, Address[]) line: 168
>              Transport.send(Message) line: 98
>              SMTPAppender(SMTPAppenderBase<E>).sendBuffer(E) line: 292
>              SMTPAppender(SMTPAppenderBase<E>).append(E) line: 159
>              SMTPAppender(AppenderBase<E>).doAppend(E) line: 85
>              AppenderAttachableImpl<E>.appendLoopOnAppenders(E) line: 64
>              Logger.appendLoopOnAppenders(ILoggingEvent) line: 283
>              Logger.callAppenders(ILoggingEvent) line: 270
>              Logger.buildLoggingEventAndAppend(String, Marker, Level,
> String, Object[], Throwable) line: 471
>              Logger.filterAndLog_0_Or3Plus(String, Marker, Level,
> String, Object[], Throwable) line: 425
>              Logger.error(Marker, String) line: 592
>              LoggerEmailTest.testEmailSend() line: 99
>              NativeMethodAccessorImpl.invoke0(Method, Object, Object[])
> line: not available [native method]
>              NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
>              DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
>              Method.invoke(Object, Object...) line: 597
>              FrameworkMethod$1.runReflectiveCall() line: 44
>              FrameworkMethod$1(ReflectiveCallable).run() line: 15
>              FrameworkMethod.invokeExplosively(Object, Object...) line: 41
>              InvokeMethod.evaluate() line: 20
>              RunBefores.evaluate() line: 28
>              RunBeforeTestMethodCallbacks.evaluate() line: 74
>              RunAfters.evaluate() line: 31
>              RunAfterTestMethodCallbacks.evaluate() line: 82
>              SpringRepeat.evaluate() line: 72
>              SpringJUnit4ClassRunner.runChild(FrameworkMethod,
> RunNotifier) line: 240
>
> SpringJUnit4ClassRunner(BlockJUnit4ClassRunner).runChild(Object,
> RunNotifier) line: 50
>              ParentRunner$3.run() line: 193
>              ParentRunner$1.schedule(Runnable) line: 52
>
> SpringJUnit4ClassRunner(ParentRunner<T>).runChildren(RunNotifier) line: 191
>              ParentRunner<T>.access$000(ParentRunner, RunNotifier) line: 42
>              ParentRunner$2.evaluate() line: 184
>              RunBeforeTestClassCallbacks.evaluate() line: 61
>              RunAfterTestClassCallbacks.evaluate() line: 70
>              SpringJUnit4ClassRunner(ParentRunner<T>).run(RunNotifier)
> line: 236
>              SpringJUnit4ClassRunner.run(RunNotifier) line: 180
>
> JUnit4TestClassReference(JUnit4TestReference).run(TestExecution) line: 46
>              TestExecution.run(ITestReference[]) line: 38
>              RemoteTestRunner.runTests(String[], String, TestExecution)
> line: 467
>              RemoteTestRunner.runTests(TestExecution) line: 683
>              RemoteTestRunner.run() line: 390
>              RemoteTestRunner.main(String[]) line: 197
>          Thread [ReaderThread] (Running)
>          Thread [org.subethamail.smtp.server.SMTPServer] (Running)
>          Thread [org.subethamail.smtp.server.Session-/127.0.0.1:3601]
> (Running)
>



More information about the Logback-user mailing list