logback 获取 bootstrap.yml 配置
 作者:小黄鸡1992
- 2021 年 12 月 03 日
- 本文字数:3178 字 - 阅读完需:约 10 分钟 

可以看到在 logback.xml 时,将 elasticsearch 地址写死了,但是这样就不能通过 nacos 等配置中心动态的修改了。下文将介绍如何将地址写在配置文件中。
1.修改 logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?><!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 --><!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true --><!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 --><!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 --><configuration  scan="true" scanPeriod="10 seconds">    <contextName>logback</contextName>    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->    <springProperty name="ES_URL" source="logging.es-url"/>    <springProperty name="ES_PORT" source="logging.es-port"/>    <property name="LOG_HOME" value="/home/logs" />    <property name="APPNAME" value="authentication" />     <!-- 彩色日志 -->    <!-- 彩色日志依赖的渲染类 -->    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />    <!-- 彩色日志格式 -->    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>     <!--输出到控制台-->    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">        <encoder>            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>            <!-- 设置字符集 -->            <charset>UTF-8</charset>        </encoder>         <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">            <level>all</level>        </filter>    </appender>     <!--输出到文件-->    <!-- 时间滚动输出 level为 DEBUG 日志 -->    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">        <!-- 记录的日志文件的路径及文件名 -->        <file>${LOG_HOME}/${APPNAME}/bizLog/${APPNAME}.log</file>        <!--日志文件输出格式-->        <encoder>            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>            <charset>UTF-8</charset> <!-- 设置字符集 -->        </encoder>        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">            <fileNamePattern>${LOG_HOME}/${APPNAME}/bizLog/${APPNAME}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>            <!--保存时间3天-->            <cleanHistoryOnStart>true</cleanHistoryOnStart>            <MaxHistory>3</MaxHistory>            <!-- 除按日志记录之外,还配置了日志文件不能超过50M,若超过50M,日志文件会以索引0开始,  命名日志文件,例如bizlog-biz-20181219.0.log -->            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">                <maxFileSize>50MB</maxFileSize>            </timeBasedFileNamingAndTriggeringPolicy>        </rollingPolicy>        <!-- 追加方式记录日志 -->        <append>true</append>    </appender>     <appender name="LOGSTASH"              class="net.logstash.logback.appender.LogstashTcpSocketAppender">        <destination>${ES_URL:- }:${ES_PORT:- }</destination>        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">        </filter>        <!-- encoder必须配置,有多种可选 -->        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">            <customFields>{"appname":"carer"}</customFields>            <providers>                <!--自定义日志输出格式-->                <pattern>                    <pattern>                        {                        "project": "mall-tiny",                        "level": "%level",                        "service": "${APP_NAME:-}",                        "pid": "${PID:-}",                        "thread": "%thread",                        "class": "%logger",                        "message": "%message",                        "stack_trace": "%exception{20}"                        }                    </pattern>                </pattern>            </providers>        </encoder>        <connectionStrategy>            <roundRobin>                <connectionTTL>5 minutes</connectionTTL>            </roundRobin>        </connectionStrategy>    </appender>     <!-- 打印sql -->    <logger name="com.ibatis" level="DEBUG" />    <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG" />    <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" />    <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG" />    <logger name="java.sql.Connection" level="DEBUG" />    <logger name="java.sql.Statement" level="DEBUG" />    <logger name="java.sql.PreparedStatement" level="DEBUG" />    <logger name="java.sql.ResultSet" level="DEBUG" />    <logger name="com.vanpeng.authentication.business.mapper" level="DEBUG" />     <root level="info">        <appender-ref ref="CONSOLE" />        <appender-ref ref="INFO_FILE" />    </root></configuration>复制代码
 以上是全部的文件,如果没有思路,可以全部复制。最主要的是以下配置。
<!--表示从bootstrap.yml中logging获取ES_URL和ES_PORT --><springProperty name="ES_URL" source="logging.es-url"/><springProperty name="ES_PORT" source="logging.es-port"/>复制代码
 <!-- 指定连接的ip与端口号--><destination>${ES_URL:- }:${ES_PORT:- }</destination>复制代码
 2.添加 bootstrap.yml
指定常量供 logback 使用。
logging:  level:    com.vanpeng: debug  config: classpath:logback.xml  es-url: 14.13.19.90  es-port: 4999复制代码
 3.注意
- application.yml 名一定要改成更改成 bootstrap.yml。 
- logback 配置文件名称为 logback-spring.xml。 
以上都是硬性要求,否则在启动时会报错,查找不到 bootstrap.yml 中的配置。
划线
评论
复制
发布于: 3 小时前阅读数: 7
版权声明: 本文为 InfoQ 作者【小黄鸡1992】的原创文章。
原文链接:【http://xie.infoq.cn/article/5233456e769fd66e73e8d8373】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。

小黄鸡1992
关注
小黄鸡加油 2021.07.13 加入
一位技术落地与应用的博主,带你从入门,了解和使用各项顶流开源项目。











 
    
评论