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)   

_______________________________________________
Logback-user mailing list
[email protected]
http://qos.ch/mailman/listinfo/logback-user

Reply via email to