zoukankan      html  css  js  c++  java
  • SpringBoot中logback.xml使用application.yml中属性

    教你如何使用 springProfilespringProperty 让你的logback.xml 配置显得更有逼格,当别人还在苦苦挣扎弄logback-{profile}.xml的时候 你一个文件就搞定了…

    - springProfile

    <springProfile> 标签允许我们更加灵活配置文件,可选地包含或排除配置部分。元素中的任何位置均支持轮廓部分。使用该name属性指定哪个配置文件接受配置。可以使用逗号分隔列表指定多个配置文件。

    <springProfile name="dev">
        <!-- 开发环境时激活 -->
    </springProfile>
    
    <springProfile name="dev,test">
        <!-- 开发,测试的时候激活-->
    </springProfile>
    
    <springProfile name="!prod">
        <!-- 当 "生产" 环境时,该配置不激活-->
    </springProfile>

    - 案例

    <!-- 开发环境日志级别为DEBUG -->
    <springProfile name="dev">
        <root level="DEBUG">
            <appender-ref ref="FILE"/>
            <appender-ref ref="STDOUT"/>
        </root>
    </springProfile>
    
    <!-- 测试环境日志级别为INFO -->
    <springProfile name="test">
        <root level="INFO">
            <appender-ref ref="FILE"/>
            <appender-ref ref="STDOUT"/>
        </root>
    </springProfile>

    - springProperty

    1.该 <springProperty> 标签允许我们从Spring中显示属性,Environment 以便在Logback中使用。如果你想将 application.properties在回读配置中访问文件中的值,这将非常有用

    2.标签的工作方式与Logback的标准 <property> 标签类似,但不是直接value 指定source属性(从Environment)指定。scope 如果需要将属性存储在local范围之外的其他位置,则可以使用该属性。如果您需要一个后备值,以防该属性未设置,则Environment可以使用该defaultValue属性。

    <springProperty scope="context" name="fluentHost" source="myapp.fluentd.host" defaultValue="localhost"/>
    <appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
        <remoteHost>${fluentHost}</remoteHost>
        
    </appender>

    - 案例

    <!-- 读取spring.application.name中的属性来生成日志文件名 -->
    <springProperty scope="context" name="logName" source="spring.application.name" defaultValue="localhost.log"/>
    
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/${logName}.log</file>    <!-- 使用方法 -->
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>logs/${logName}-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>7</maxHistory>
            <totalSizeCap>3GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] &#45;&#45;%mdc{client} %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
        </filter>
    </appender>

    将RelaxedPropertyResolver用于访问环境属性。如果使用虚线符号指定source(my-property-name)所有的变化都会被尝试(myPropertyName,MY_PROPERTY_NAME等)。

    - logback-spring.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true">
    
        <springProperty scope="context" name="logName" source="spring.application.name" defaultValue="localhost.log"/>
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>logs/${logName}.log</file>
            <append>true</append>
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>logs/${logName}-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
                <maxFileSize>100MB</maxFileSize>
                <maxHistory>7</maxHistory>
                <totalSizeCap>3GB</totalSizeCap>
            </rollingPolicy>
            <encoder>
                <pattern>[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] &#45;&#45;%mdc{client} %msg%n</pattern>
            </encoder>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>DEBUG</level>
            </filter>
        </appender>
        <!-- Console output -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>
                    [ %-5level] [%date{yyyy-MM-dd HH:mm:ss}] %logger{96} [%line] - %msg%n
                </pattern>
                <charset>UTF-8</charset> <!-- 此处设置字符集 -->
            </encoder>
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>DEBUG</level>
            </filter>
        </appender>
    
        <springProfile name="dev,test">
            <root level="DEBUG">
                <appender-ref ref="FILE"/>
                <appender-ref ref="STDOUT"/>
            </root>
        </springProfile>
    
        <springProfile name="prod">
            <root level="INFO">
                <appender-ref ref="FILE"/>
                <appender-ref ref="STDOUT"/>
            </root>
        </springProfile>
    
        <logger name="org.springframework" level="INFO"/>
        <logger name="com.netflix" level="WARN"/>
        <logger name="org" level="INFO"/>
        <logger name="springfox.documentation" level="INFO"/>
    
    </configuration>
  • 相关阅读:
    FormsAuthentication 简单使用
    2.0 泛型
    解决Eclipse java build path中Web App Libraries无法自动找到WEBINF的lib目录
    WinHex 15.8 r4 注册信息
    用ClassPathXmlApplicationContext读取Spring配置文件的路径问题
    Installing NFS on CentOS 6.2
    使用XStream对Java对象进行序列化和反序列化
    Eclipse代码注释模板code template
    Timestamp和String的相互转换 Java
    visual studio vs2010 2012 C/C++ 编译找不到mspdb100.dll文件的解决方法
  • 原文地址:https://www.cnblogs.com/jianliang-Wu/p/8945343.html
Copyright © 2011-2022 走看看