приложения logback не работают для scope = "context", но не для scope = "system" - PullRequest
0 голосов
/ 14 июля 2020

Я пробую экстернализацию logback-spring.xml для своего приложения Springboot. Файл logback-spring.xml добавляет журналы к двум приложениям: appender файла и logsta sh appender.

Этот файл включает внешний файл logback-external.yml. Как logback-spring.xml, так и включенный файл logback-external.yml периодически сканируются на предмет изменений, как показано ниже.

Некоторые из переменных, определяемых приложением c, выбираются из application.yml по <springProperty>. Для scope = “context”, scope= “local” или scope= “system” переменные <springProperty> имеют вид ‘logstash_port_IS_UNDEFINED’ (см. Снимок журналов), и все приложения не работают.

Однако для scope= “system” есть загвоздка. Как упоминалось в логбэке do c, «свойство с системной областью действия вставляется в системные свойства JVM и действует до тех пор, пока JVM или пока оно не будет очищено» , кажется чтобы дополнения регистрации продолжали работать со старыми рабочими значениями для этих переменных.

Кто-нибудь еще, кто пытался получить параметры регистрации c приложения в файл logback-spring. xml, и столкнулся с похожей проблемой проблема при включенном автоматическом сканировании? Могу ли я сделать ставку на scope = «system» для реализации экстернализации и автоматического сканирования logback?

logback-spring. xml

 <configuration  debug="true" scan="true" scanPeriod="15 seconds">
    <property resource="application.yml" />
    <springProperty scope="system" name="logstash_host"
        source="myapp.logging.logstash.host" />
    <springProperty scope="system" name="logstash_port"
        source="myapp.logging.logstash.port" />
    <springProperty scope="system" name="base_log_dir"
        source="base_log" />
    <springProperty  scope="system" name="app_name"
        source="spring.application.name" />
    <springProperty  scope="system" name="app_port"
        source="server.port"/>
    <springProperty scope="system" name="max_history"
        source="logback.max_history_size" />
    <springProperty scope="system" name="max_log_file_size"
        source="max_log_size" />
    
    <include optional="false"
        file="external-logback-file-location/logback-external.xml" />
</configuration>

logback-external.yml

 <?xml version="1.0" encoding="UTF-8"?>

<included>
     
    <appender name="FILE-ROLLING-ALL"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator
                class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
                <marker>metrics</marker>
            </evaluator>
            <onMatch>DENY</onMatch>
        </filter>
        <rollingPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${base_log_dir}/${app_name}/${app_name}_-%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>
            <maxFileSize>${max_log_file_size}</maxFileSize>
            <maxHistory>${max_history}</maxHistory>
            <!---other rolling specific policies here ---->
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level
                %logger{36}.%M [%line] - %msg%n
            </pattern>
        </encoder>
    </appender>

<appender name="LOGSTASH"
        class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>${logstash_host}:${logstash_port}</destination>
        <encoder charset="UTF-8"
            class="net.logstash.logback.encoder.LogstashEncoder">           
            <customFields>
            {               
                    "custom-field":"custom-field-value"
            }
            </customFields>
        </encoder>
</appender>
    <root level="info">
        <appender-ref ref="FILE-ROLLING-ALL"/>
        <appender-ref ref="LOGSTASH" />
    </root>
    <!-- in the absence of the class attribute, assume ch.qos.logback.core.hook.DefaultShutdownHook -->
    <shutdownHook
        class="ch.qos.logback.core.hook.DelayingShutdownHook" />

</included>

Журналы ошибок из Logback

22:37:02,388 |-ERROR in ch.qos.logback.core.joran.util.PropertySetter@4c9c7665 - Failed to invoke valueOf{} method in class [ch.qos.logback.core.util.FileSize] with value [max_log_file_size_IS_UNDEFINED]
22:37:02,388 |-WARN in ch.qos.logback.core.joran.util.PropertySetter@4c9c7665 - Failed to set property [maxFileSize] to value "max_log_file_size_IS_UNDEFINED".  ch.qos.logback.core.util.PropertySetterException: Conversion to type [class ch.qos.logback.core.util.FileSize] failed.
    at ch.qos.logback.core.util.PropertySetterException: Conversion to type [class ch.qos.logback.core.util.FileSize] failed.
    
    22:37:02,389 |-WARN in ch.qos.logback.core.joran.util.PropertySetter@99ee192 - Failed to set property [maxHistory] to value "max_history_IS_UNDEFINED".  ch.qos.logback.core.util.PropertySetterException: Conversion to type [int] failed. 
    
    22:37:02,391 |-ERROR in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@945654245 - maxFileSize property is mandatory.
    
    Caused by: java.lang.IllegalArgumentException: Invalid destination 'logstash_host_IS_UNDEFINED:logstash_port_IS_UNDEFINED': unparseable value (expected format 'host[:port]').
    at  at net.logstash.logback.appender.destination.DestinationParser.parse(DestinationParser.java:62)
    at  at net.logstash.logback.appender.AbstractLogstashTcpSocketAppender.addDestination(AbstractLogstashTcpSocketAppender.java:892)
    at  ... 23 common frames omitted
22:37:02,395 |-ERROR in net.logstash.logback.appender.LogstashTcpSocketAppender[LOGSTASH] - No destination was configured. Use <destination> to add one or more destinations to the appender
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...