1

我将 logback-android-11.1-2.jar 与 slf4j-api-1.7.6.jar 和 android javamail 库(激活、附加和邮件 jar)一起使用。

我正在使用 SMTP 附加程序,当 asynchronousSending 设置为 true 或被省略(默认情况下也是 true)时,它可以正常工作,但如果我将其明确设置为 false,则不会发送任何电子邮件,我不会收到任何内容。

我想要实现的是在设备获得连接时重新尝试发送电子邮件,就好像在设备没有连接时触发了 SMTP 附加程序,那么电子邮件将永远不会被发送。我认为也许将 SMTP 附加程序配置为同步会起作用吗?

我做错了什么还是这是一个问题?

谢谢,

这是我的 logback.xml:

<configuration>
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
<smtpHost>dnzakex.com</smtpHost>
<smtpPort>25</smtpPort>
<to>sample@gmail.com</to>
<from>no-reply@test.com</from>
<subject>Mobile LOG - %logger{35}</subject>

    <layout class="ch.qos.logback.classic.html.HTMLLayout">
        <pattern>%d{dd-MM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </layout>

<!--Asynchronous by default is true, but we want to wait confirmation in case there is no connectivity. THIS DOES NOT WORK-->
<asynchronousSending>false</asynchronousSending>
</appender>

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/mnt/sdcard/MobileLog.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <!-- rollover daily. The %i will iterate file names as file1, file2, etc for the same date-->
    <FileNamePattern>/mnt/sdcard/MobileLog.%d{dd-MM-yyyy}.%i.log.gz</FileNamePattern>
    <MaxHistory>30</MaxHistory>
    <timeBasedFileNamingAndTriggeringPolicy
        class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>5MB</maxFileSize>
    </timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<append>true</append>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    <charset>UTF-8</charset>
    <pattern>%d{dd-MM-yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

<root level="INFO">
<appender-ref ref="EMAIL" />
<appender-ref ref="FILE" />
</root>
</configuration> 

PS:我尝试过使用 logback-android-11.1-3.jar 得到相同的结果。令人惊讶地配置为 asynchronousSending false 它仅在某些时候有效。例如,如果我启动 android 应用程序并开始记录一些内容,它将附加到文件中,如果我记录一个错误,我将不会收到错误应该触发的电子邮件(并且当 asynchronousSending 为真时,我会正确接收它),但是.. 如果稍后在 LOG.error(..) 上记录了其他错误,则会触发电子邮件。突然使电子邮件发送工作的原因对我来说没有任何意义,但这似乎是框架中的错误?

4

1 回答 1

1

根据 android logback 的所有者,这不是错误,而是预期的行为。限制是如果我们期望 SMTP 附加程序在 asynchronousSending 选项设置为 false 时发送电子邮件,则不能在主线程中记录 LOG 跟踪。

有关此内容以及 SMTP 附加程序为何不跟踪成功或未成功发送的电子邮件的更多详细信息:

https://github.com/tony19/logback-android/issues/71

于 2014-07-29T03:23:27.190 回答