SPRINGBOOT中logback-spring.xml讀取application.properties配置文件中url

解決方案:需要通過springProperty標籤來引用:

<springProperty scope="context" name="elkLoggerUrl" source="elk.logger.destination"/>
           

這裏的name和上面property標籤一樣不多說,source其實就是上面的value啦,只不過要注意:千萬不要加${}。

在接入elk中,發現將 ${elkLoggerUrl} 放在 <destination>${elkLoggerUrl}</destination> 中間會報錯,

加上默認值,改成下面就可以了

<springProperty scope="context" name="elkLoggerUrl" source="elk.logger.destination" defaultValue="145.168.36.23:4567"/>

附:logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--該日誌將日誌級別不同的log信息保存到不同的文件中 -->
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />

    <springProperty scope="context" name="springAppName"  source="spring.application.name" />
    <springProperty scope="context" name="elkLoggerUrl" source="elk.logger.destination"
                    defaultValue="145.168.36.23:4567"/>
    <!-- 日誌在工程中的輸出位置 -->
    <property name="log.path" value="/data/logs/${springAppName}" />

    <!-- 控制檯的日誌輸出樣式 -->
    <property name="CONSOLE_LOG_PATTERN"
              value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
    <!-- 日誌輸出到文件的輸出樣式 -->
    <property name="pattern" value="[${springAppName}] %d %-5level [%X{ctxLogId}][%thread] %logger{5}.%M[%L] - %msg%n"/>


    <!-- 控制檯輸出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <!-- 日誌輸出編碼 -->
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <!--輸出到文件-->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在記錄的日誌文件的路徑及文件名 -->
        <file>${log.path}/${elkHost}_info.log</file>
        <!--日誌文件輸出格式-->
        <encoder>
            <pattern>${pattern}</pattern>
            <charset>utf8</charset>
        </encoder>
        <!-- 日誌記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日誌歸檔路徑以及格式 -->
            <fileNamePattern>${log.path}/info.log.%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>200MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日誌文件保留天數-->
            <maxHistory>10</maxHistory>
        </rollingPolicy>
        <!-- 此日誌文件只記錄info級別的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 時間滾動輸出 level爲 ERROR 日誌 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在記錄的日誌文件的路徑及文件名 -->
        <file>${log.path}/error.log</file>
        <!--日誌文件輸出格式-->
        <encoder>
            <pattern>${pattern}</pattern>
            <charset>utf8</charset>
        </encoder>
        <!-- 日誌記錄器的滾動策略,按日期,按大小記錄 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/error.log.%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>200MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日誌文件保留天數-->
            <maxHistory>10</maxHistory>
        </rollingPolicy>
        <!-- 此日誌文件只記錄ERROR級別的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 爲logstash輸出的JSON格式的Appender -->
    <appender name="logstash"
              class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>${elkLoggerUrl}</destination>
        <!-- 日誌輸出編碼 -->
        <encoder
                class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <mdc />
                <timestamp>
                    <timeZone>UTC</timeZone>
                </timestamp>
                <pattern>
                    <pattern>
                        {
                        "severity": "%level",
                        "applicationName": "${springAppName:-}",
                        "requestId": "%X{requestId:-}",
                        "pid": "${PID:-}",
                        "thread": "%thread",
                        "class": "%logger{40}",
                        "message": "%message"
                        }
                    </pattern>
                </pattern>
                <stackTrace>
                    <throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
                        <maxDepthPerThrowable>50</maxDepthPerThrowable>
                        <maxLength>4048</maxLength>
                        <shortenedClassNameLength>50</shortenedClassNameLength>
                        <exclude>^sun\.reflect\..*\.invoke</exclude>
                        <exclude>^net\.sf\.cglib\.proxy\.MethodProxy\.invoke</exclude>
                        <rootCauseFirst>true</rootCauseFirst>
                    </throwableConverter>
                </stackTrace>
            </providers>
        </encoder>
    </appender>

    <!-- 測試環境輸出級別 -->
    <springProfile name="local,test,test2,work,dev">
        <root level="INFO">
            <appender-ref ref="logstash" />
            <appender-ref ref="ERROR_FILE" />
        </root>
    </springProfile>

    <!-- 線上環境輸出級別 -->
    <springProfile name="uat,prd">
        <root level="INFO">
            <appender-ref ref="logstash" />
            <appender-ref ref="ERROR_FILE" />
        </root>
    </springProfile>

    <root level="INFO">
        <appender-ref ref="console" />
    </root>

</configuration>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章