如何使用默认值在 Logback 中定义变量并覆盖它?

car*_*ing 6 java logback maven maven-surefire-plugin

我想在 Logback (1.2.1) 中定义一个属性/变量:

  • 有默认值
  • 可以通过 Java 命令行选项覆盖

基本上,在开发过程中,我希望 Maven 使用如下方式调用maven-surefire-plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <systemPropertyVariables>
            <log.dir>${project.build.directory}/logs</log.dir>
        </systemPropertyVariables>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

(我确信上述工作正常,因为我有其他属性以这种方式传递给测试,并且这些属性按预期工作)。

目前,我有以下几点logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration scan="true" scanPeriod="30 seconds" debug="false">

    <property name="log.dir" value="."/>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.dir}/logs/my.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>strongbox_%d{yyyy-MM-dd}.%i.log</fileNamePattern>

            <fileNamePattern>strongbox-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>128MB</maxFileSize>
            <maxHistory>31</maxHistory>
            <totalSizeCap>1GB</totalSizeCap>

            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <encoder>
            <charset>UTF-8</charset>
            <pattern>%d{HH:mm:ss.SSS dd-MM-yyyy} | %-5.5p | %-20.20t | %-50.50logger{50} | %m%n</pattern>
        </encoder>
    </appender>
    ...
</configuration>
Run Code Online (Sandbox Code Playgroud)

-Dlog.dir=foo/logs,它只是被忽略和日志文件在当前目录中产生。我在这里做错了什么?它需要一个范围吗?需要if设置条件吗?

小智 11

如果您需要一个变量,例如 called log.file.root,它应该默认为 value app-logs,请将其定义为:

<property name="LOG_ROOT" value="${log.file.root:-app-logs}" />

然后${LOG_ROOT}在需要的地方使用。

这个变量可以通过命令行覆盖:

-Dlog.file.root=/home/user/logs
Run Code Online (Sandbox Code Playgroud)

参考:https : //logback.qos.ch/manual/configuration.html ->“变量的默认值”


dav*_*xxx 2

您指定 maven-surefire-plugin 的属性。
因此该属性将仅针对此插件执行进行绑定:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <systemPropertyVariables>
            <log.dir>${project.build.directory}/logs</log.dir>
        </systemPropertyVariables>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您希望无论执行的插件如何,都绑定该属性。不仅用于测试执行。

所以你应该使用 <build>pom.xml 标签中声明的属性。

<build>
      ...
  <properties>
     <log.dir>${project.build.directory}/logs</log.dir>
  </properties>
      ...
</build>
Run Code Online (Sandbox Code Playgroud)

为了将 logback 配置中使用的 Maven 属性替换为从 pom 计算的实际值,您必须启用 Maven 资源过滤:

  ...
  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
  </resource>
  ...
Run Code Online (Sandbox Code Playgroud)

当然,Logback 配置必须位于该src/main/resources文件夹内(此文件夹或子文件夹)。


归档时间:

查看次数:

8240 次

最近记录:

7 年,9 月 前