欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

logback多环境配置

程序员文章站 2022-03-06 10:09:17
现在项目基本都是要区分测试开发等等一系列环境的,也因此maven,spring之类的都具有profile这类功能,可以针对不同的环境采用不同的配置.因此日志也可能根据不同的环境需要不同的配置.恰巧手头上碰到了这么一个需求,日志文件也需要区分环境,便搜索了一下相关的资料,发现logback的确也提供这 ......

现在项目基本都是要区分测试开发等等一系列环境的,也因此maven,spring之类的都具有profile这类功能,可以针对不同的环境采用不同的配置.因此日志也可能根据不同的环境需要不同的配置.恰巧手头上碰到了这么一个需求,日志文件也需要区分环境,便搜索了一下相关的资料,发现logback的确也提供这么一种支持.

从logback官网的文档中找到一段关于<if>标签的配置说明,它提供一种根据表达式的值来决定是否输出配置的功能,类似于c标签中的if,官网的示例如下:

<!-- if-then form -->
   <if condition="some conditional expression">
    <then>
      ...
    </then>
  </if>
  
  <!-- if-then-else form -->
  <if condition="some conditional expression">
    <then>
      ...
    </then>
    <else>
      ...
    </else>    
  </if>

这个<if>标签可以使用在日志配置文件中的<configuration>标签内部任意位置,一种简单的使用实例如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property resource="config.properties" />
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <charset>UTF-8</charset>
            <pattern>%date [%thread] %-5level - %msg%n</pattern>
        </encoder>
    </appender>
    <if condition='property("logstash").contains("true")'>
        <then>
            <appender name="logStash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
                <destination>${logstash.address}</destination>
                <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
                <keepAliveDuration>15 minutes</keepAliveDuration>
            </appender>
        </then>
    </if>
    <root level="ERROR">
        <appender-ref ref="stdout"/>
        <if condition='property("logstash").contains("true")'>
            <then>
                <appender-ref ref="logStash"/>
            </then>
        </if>
    </root>
</configuration>

这种标签只支持从property中取值,或是从system系统property中取值,取出的为string类型的值,可以通过contains方法判断是否满足某个条件.

特别说明:这个是通过Janino库实现的,故需要加入此库的依赖.

<dependency>
  <groupId>org.codehaus.janino</groupId>
  <artifactId>janino</artifactId>
  <version>3.0.6</version>
</dependency>