Finally I got SMTPAppender working on a real Android application!<div><br></div><div>BUT (there is always an but, eh?) I had to overcome a strange error in the configuration:</div><div>after having enabled <a href="http://logback.qos.ch/manual/configuration.html#statusListener">listening to status messages</a> I found out I was getting</div>
<div>an error like</div><div><span style="background-color:rgb(238,238,238);font-family:Courier,'MS Courier New',Prestige,monospace;white-space:pre;font-size:medium">ERROR in c.q.l.c.joran.spi.Interpreter@</span><b style="background-color:rgb(238,238,238);font-family:Courier,'MS Courier New',Prestige,monospace;white-space:pre;font-size:medium">xx:yy</b><span style="background-color:rgb(238,238,238);font-family:Courier,'MS Courier New',Prestige,monospace;white-space:pre;font-size:medium"> - no applicable action for [ssl], current pattern is [[configuration][appender][ssl]]</span> </div>
<div><br></div><div>my email appender was like</div><div><div><br></div><div><configuration></div></div><div>...</div><div><div><span class="Apple-tab-span" style="white-space:pre">   </span><appender<span class="Apple-tab-span" style="white-space:pre">        </span>name="EMAIL"</div>
<div><span class="Apple-tab-span" style="white-space:pre">                              </span>class="ch.qos.logback.classic.net.SMTPAppender"></div><div><span class="Apple-tab-span" style="white-space:pre">                </span><smtpHost><a href="http://smtp.gmail.com">smtp.gmail.com</a></smtpHost></div>
<div><span class="Apple-tab-span" style="white-space:pre">              </span><smtpPort>465</smtpPort></div><div><span class="Apple-tab-span" style="white-space:pre">         </span><ssl>true</ssl></div><div><span class="Apple-tab-span" style="white-space:pre">          </span><username><a href="mailto:xyzzy@gmail.com">xyzzy@gmail.com</a></username></div>
<div><span class="Apple-tab-span" style="white-space:pre">              </span><password>xyzzy</password></div><div><span class="Apple-tab-span" style="white-space:pre">               </span><to><a href="mailto:xyzzy@gmail.com">xyzzy@gmail.com</a></to></div>
<div><span class="Apple-tab-span" style="white-space:pre">              </span><from><a href="mailto:xyzzy@gmail.com">xyzzy@gmail.com</a></from></div><div><span class="Apple-tab-span" style="white-space:pre">          </span><layout class="ch.qos.logback.classic.PatternLayout"></div>
<div>    <span class="Apple-tab-span" style="white-space:pre">                </span><pattern>%date [%thread] %-5level %logger - %msg%n"></pattern></div><div>  <span class="Apple-tab-span" style="white-space:pre">                </span></layout></div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span></appender></div><div><div><div></configuration></div></div></div><div><br></div><div>So in order to have a first working version of SMTPAppender</div>
<div>I had to set ssl = true as default (see code in my github clone)</div><div>value instead of false and remove the <ssl> config option.</div><div><br></div><div>I tried to investigate further why the <ssl> config did not work but</div>
<div>did not find anything specific in the logback code.</div><div>So any hints is welcome.</div><div><br></div><div>Thanks in advance</div><div>Hope it helps</div><div>Ciao</div><div>Enrico</div><br><div class="gmail_quote">
On Mon, Feb 6, 2012 at 12:07, Enrico Spinielli <span dir="ltr"><<a href="mailto:enrico.spinielli@googlemail.com">enrico.spinielli@googlemail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
it looks like I am close to be able to add support for SMTPAppender.<br>
I modified the build.xml to include the relevant code, re-introduced the<br>
tests (SocketAppenderTest.class, DilutedSMTPAppenderTest.class,<br>
 SMTPAppender_GreenTest.class) and (properly?) set the bootclasspath<br>
to use the android version of javax.mail (see my previous post on SMTPAppender).<br>
I forked logback-android and pushed my changes in<br>
<a href="https://github.com/espinielli/logback-android" target="_blank">https://github.com/espinielli/logback-android</a><br>
<br>
It looks like the features I am interested in are ok, since I am<br>
getting only html/htmlLong<br>
test cases failing (see below) and I am not interested in sending html<br>
formatted logs via email.<br>
<br>
I will try this version out on my android app soon and provide<br>
feedback on this list.<br>
<br>
Of course I will welcome any feedbacks from anyone on what I did, i.e. mistakes,<br>
bugs ... fixes and ideas are welcome too.<br>
<br>
Thanks in advance<br>
Bye<br>
Enrico<br>
<br>
When I run the tests I get html/htmlLong failing with the following:<br>
    [junit] Testcase: html took 260.281 sec<br>
    [junit]     Caused an ERROR<br>
    [junit] Unexpected end of file from server Nested exception:<br>
Unexpected end of file from server<br>
    [junit] org.dom4j.DocumentException: Unexpected end of file from<br>
server Nested exception: Unexpected end of file from server<br>
    [junit]     at org.dom4j.io.SAXReader.read(SAXReader.java:484)<br>
    [junit]     at org.dom4j.io.SAXReader.read(SAXReader.java:343)<br>
    [junit]     at<br>
ch.qos.logback.classic.net.SMTPAppender_GreenTest.html(Unknown Source)<br>
    [junit] Nested exception:<br>
    [junit] java.net.SocketException: Unexpected end of file from server<br>
    [junit]     at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:777)<br>
    [junit]     at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:640)<br>
    [junit]     at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:774)<br>
    [junit]     at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:640)<br>
    [junit]     at<br>
sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:677)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1315)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1252)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.startPE(XMLDTDScannerImpl.java:722)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.skipSeparator(XMLDTDScannerImpl.java:2069)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDecls(XMLDTDScannerImpl.java:2032)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDTDExternalSubset(XMLDTDScannerImpl.java:320)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1203)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1090)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1003)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)<br>
    [junit]     at org.dom4j.io.SAXReader.read(SAXReader.java:465)<br>
    [junit]     at org.dom4j.io.SAXReader.read(SAXReader.java:343)<br>
    [junit]     at<br>
ch.qos.logback.classic.net.SMTPAppender_GreenTest.html(Unknown Source)<br>
    [junit]<br>
    [junit] Testcase: htmlLong took 736.286 sec<br>
    [junit]     Caused an ERROR<br>
    [junit] Unexpected end of file from server Nested exception:<br>
Unexpected end of file from server<br>
    [junit] org.dom4j.DocumentException: Unexpected end of file from<br>
server Nested exception: Unexpected end of file from server<br>
    [junit]     at org.dom4j.io.SAXReader.read(SAXReader.java:484)<br>
    [junit]     at org.dom4j.io.SAXReader.read(SAXReader.java:343)<br>
    [junit]     at<br>
ch.qos.logback.classic.net.SMTPAppender_GreenTest.htmlLong(Unknown<br>
Source)<br>
    [junit] Nested exception:<br>
    [junit] java.net.SocketException: Unexpected end of file from server<br>
    [junit]     at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:777)<br>
    [junit]     at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:640)<br>
    [junit]     at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:774)<br>
    [junit]     at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:640)<br>
    [junit]     at<br>
sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:677)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1315)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1252)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.startPE(XMLDTDScannerImpl.java:722)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.skipSeparator(XMLDTDScannerImpl.java:2069)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDecls(XMLDTDScannerImpl.java:2032)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDTDExternalSubset(XMLDTDScannerImpl.java:320)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1203)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1090)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1003)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)<br>
    [junit]     at<br>
com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)<br>
    [junit]     at org.dom4j.io.SAXReader.read(SAXReader.java:465)<br>
    [junit]     at org.dom4j.io.SAXReader.read(SAXReader.java:343)<br>
    [junit]     at<br>
ch.qos.logback.classic.net.SMTPAppender_GreenTest.htmlLong(Unknown<br>
Source)<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Enrico Spinielli<br>
"Do Androids dream of electric sheep?"— Philip K. Dick<br>
"Hear and forget; see and remember;do and understand."—Mitchel Resnick<br>
"He who refuses to do arithmetic is doomed to talk nonsense."—John McCarthy<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br>Enrico Spinielli<br>"Do Androids dream of electric sheep?"— Philip K. Dick<br>"Hear and forget; see and remember;do and understand."—Mitchel Resnick<br>
"He who refuses to do arithmetic is doomed to talk nonsense."—John McCarthy<br>
</div>