1

logback-android-11.1-2.jar を slf4j-api-1.7.6.jar および android javamail libs (アクティベーション、追加、およびメール jar) と共に使用しています。

私は、asynchronousSending が true に設定されているか省略されている場合に正常に動作する SMTP アペンダーを使用していますが (デフォルトでは 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 を試してみましたが、同じ結果が得られました。驚くべきことに、synchronousSending false として構成されていると、時々しか機能しません。たとえば、Android アプリケーションを起動して何かをログに記録し始めると、それがファイルに追加されます。エラーをログに記録すると、エラーがトリガーされたはずの電子メールが届きません (また、asynchronousSending が true の場合、適切に受信します)。しかし..後でLOG.error(..)に他のエラーが記録された場合、電子メールがトリガーされます。何が突然メール送信を機能させているのか、私には何の意味もありませんが、フレームワークのバグのように思えますか?

4

1 に答える 1

1

Android logback の所有者によると、これはバグではなく、予期される動作です。制限は、asynchronousSending オプションが false に設定されているときに SMTP アペンダーが電子メールを送信すると予想される場合、ログ トレースをメイン スレッドに記録できないことです。

これに関する詳細と、SMTP アペンダーが成功または失敗した電子メールを追跡しない理由については、次の URL を参照してください。

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

于 2014-07-29T03:23:27.190 に答える