温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何使用springboot logback动态获取application的配置项

发布时间:2021-08-30 16:54:48 来源:亿速云 阅读:536 作者:chen 栏目:开发技术

这篇文章主要介绍“如何使用springboot logback动态获取application的配置项”,在日常操作中,相信很多人在如何使用springboot logback动态获取application的配置项问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用springboot logback动态获取application的配置项”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

目录
  • springboot logback动态获取application的配置项

    • logback自身支持以下方式配置

    • 因此只能使用spring提供的标签来对此参数进行配置

  • springboot logback配置及动态配置log目录

    • 子节点一 appender

      • 控制台输出appender

      • 文件输入appender

    • root节点-启用配置

      • 动态配置log目录

        • 获取jar目录路径

        springboot logback动态获取application的配置项

        在多环境的情况下,logback的日志路径需要进行针对性配置,也就是需要通过application.yml文件中进行配置。

        logback自身支持以下方式配置

        <property name="USER_HOME" value="/home/sebastien" />

        但是怎样才能灵活的配置“/home/sebastien”参数呢,如果不同的环境此参数值不同,那么就需要通过application.yml文件的配置项进行指定。

        但是logback.xml加载早于application.yml,如果直接通过${参数key}的形式获取是无法获取到对应参数值的。

        因此只能使用spring提供的标签来对此参数进行配置

        <springProperty scope="context" name="LOG_HOME" source="logback.file"/>

        对照上面的配置,其中property替换成了springProperty标签。两个配置属性name效果是一样的,只不过后者的source指向了application.yml文件中的key。注意此处不需要${}形式获取。

        springboot logback配置及动态配置log目录

        <?xml version="1.0" encoding="utf-8"?>
        <configuration>
            <contextName>xxx-server</contextName>
            <property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n"/>
            <property name="pattern-color" value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{50}) - %highlight(%msg) %n"/>
            <define name="LOG_HOME" class="com.youzu.dc.dcopsserver.config.LoggerConfig" />
            <!-- 控制台输出 -->
            <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
                <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                    <pattern>${pattern}</pattern>
                </encoder>
            </appender>
            <!-- 控制台输出-带颜色 -->
            <appender name="CONSOLE-WITH-COLOR" class="ch.qos.logback.core.ConsoleAppender">
                <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                    <pattern>${pattern-color}</pattern>
                </encoder>
            </appender>
            <!-- 文件输出 -->
            <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                    <fileNamePattern>${LOG_HOME}/xxxx.%d.%i.log</fileNamePattern>
                    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                        <maxFileSize>100MB</maxFileSize>
                    </timeBasedFileNamingAndTriggeringPolicy>
                    <maxHistory>30</maxHistory>
                    <totalSizeCap>3GB</totalSizeCap>
                </rollingPolicy>
                <encoder>
                    <pattern>${pattern}</pattern>
                </encoder>
            </appender>
            <root level="INFO">
                <appender-ref ref="CONSOLE-WITH-COLOR"/>
                <appender-ref ref="FILE"/>
            </root>
        </configuration>

        子节点一 appender

        appender用来格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。

        控制台输出appender
        <property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n"/>
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
           <pattern>${pattern}</pattern>
          </encoder>
        </appender>

        encoder表示输出格式,具体说明如下:

        • %d表示时间

        • %thread表示线程名

        • %-5level 表示日志级别,允许以五个字符长度输出

        • %logger{50}表示具体的日志输出者,比如类名,括号内表示长度

        • %msg表示具体的日志消息,就是logger.info(“xxx”)中的xxx

        • %n表示换行

        文件输入appender

        文件输出主要包括配置:以指定格式将日志输出到指定文件夹下的文件中,可以配置该文件的名称、最大大小、保存时间

        例如:

        <property name="LOG_HOME" value="logs"/>
        <property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n"/>
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
          <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/all.%d.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            	<maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
          </rollingPolicy>
          <encoder>
            <pattern>${pattern}</pattern>
            </encoder>
        </appender>

        上述配置的主要内容是:以指定的格式向logs文件下的文件输出日志,文件名称格式被指定为logs/all.日期.索引号.log,日志文件最大大小为10MB,超出则创建新文件,日志文件保留三十天

        索引从0开始递增

        rollingPolicy指滚动粗略,具体配置如上。

        关于日志文件大小限制也可以使用1GB配置。

        root节点-启用配置

        root节点实际上是配置启用哪种appender,可以添加多个appender。

        比如:

        <root level="INFO">
         <appender-ref ref="CONSOLE-WITH-COLOR"/>
          <appender-ref ref="FILE"/>
        </root>

        表示level为info级别,启用渲染器CONSOLE-WITH-COLOR和FILE。

        按照这样配置,输出日志时,控制台会按照CONSOLE定义的格式输出,而日志文件会按照CONSOLE-WITH-COLOR的配置去输出。

        动态配置log目录

        import ch.qos.logback.core.PropertyDefinerBase
        class LoggerConfig : PropertyDefinerBase() {
            override fun getPropertyValue(): String {
                return "${ServerConfig.applicationPath}/logs"
            }
        }

        获取jar目录路径

        /**
         *  获取jar的绝对路径文件夹
         */
        fun getApplicationPath(): String {
            val h = ApplicationHome(FileUtils::class.java)
            return h.source.parentFile.toString()
        }

        到此,关于“如何使用springboot logback动态获取application的配置项”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

        向AI问一下细节

        免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

        AI