Есть ли способ завершить logback программно, чтобы файл журнала создавался во время выполнения? - PullRequest
0 голосов
/ 13 января 2020

Я хочу отправить письмо с журналом ошибок, созданным logback. Поскольку я не знаю, сколько ошибок, ни размер файла журнала ошибок, я не могу использовать встроенный SMTP-приложение. Поэтому я написал свой собственный класс электронной почты и хочу сделать что-то вроде этого:

    try (BufferedReader br = new BufferedReader(new FileReader(logfile))) {
        if (br.readLine() == null) {
            log.info("Successful run, no errors are logged");
        } else {
            log.info("Error log found, sending email with attachment");
            SendMailWithAttachment.sendEmailWithAttachment(logfile);
        }

Моя проблема в том, что файл errorLog не создается до тех пор, пока программа не завершится. Есть ли способ обойти это?

Моя подпружиненная пружина. xml Файл:

<configuration>
    <springProfile name="local">
        <property resource="application.properties"/>
        <property name="log_info" value="${log_info}"/>
        <property name="log_error" value="${log_error}"/>
        <appender name="FILE-ROLLING"
                  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>${log_info}.%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
                <!-- each archived file, size max 10MB -->
                <maxFileSize>500KB</maxFileSize>
                <!-- total size of all archive files, if total size > 20GB, it will delete
                    old archived file -->
                <totalSizeCap>1024MB</totalSizeCap>
                <!-- 60 days to keep -->
                <maxHistory>60</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>%d %p %c{1.} [%t] %m%n</pattern>
            </encoder>
        </appender>

        <appender name="ERRORLOG" class="ch.qos.logback.core.FileAppender">
            <triggeringPolicy class="no.dnb.pbd.etl.utility.StartupTriggeringPolicy"/>
            <file>${log_error}.html</file>
            <append>true</append>
            <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.html.HTMLLayout">
                <pattern>%relative%thread%mdc%level%logger%msg</pattern>
            </layout>
            </encoder>
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>ERROR</level>
            </filter>
        </appender>

        <logger name="org.springframework" level="ERROR"/>
        <logger name="my.project.test" level="DEBUG"/>

        <root level="ERROR">
            <appender-ref ref="ERRORLOG"/>
        </root>
        <root level="DEBUG">
            <appender-ref ref="FILE-ROLLING" />
        </root>
    </springProfile>
...