【问题标题】:if condition in logback - print log messages in two different folders如果 logback 中的条件 - 在两个不同的文件夹中打印日志消息
【发布时间】:2019-06-12 20:27:30
【问题描述】:

我正在为具有相同日志级别的两个不同文件夹中的日志消息编写代码。我面临的问题是下面的代码无法打印有条件的日志消息(当它变为 else 时)。主要是 else部分不工作。

简单来说,如何使用两个不同的附加程序根据 If else 条件将日志写入两个不同的文件夹。

代码是:

<if condition='property("type").contains("DEV")'>
    <then>
        <appender-ref ref="FILE-ENGINE" />
    </then>
    <else>
        <appnder-ref ref = "FILE-UI" />
    </else>
</if>

整个配置文件是:

<configuration>

    <property name="USER_HOME" value="D:/Log1/" />

    <property name="USER_HOME2" value="D:/log2/" />


    <if condition='property("type").contains("DEV")'>
        <then>
            <appender-ref ref="FILE-ENGINE" />
        </then>
        <else>
            <appnder-ref ref = "FILE-UI" />
        </else>
    </if>


    <appender name="FILE-ENGINE" class="ch.qos.logback.core.FileAppender">
        <file>${USER_HOME}/${log.name}.log</file>
        <append>true</append>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{35} -
                %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE-UI" class="ch.qos.logback.core.FileAppender">
        <file>${USER_HOME2}/DEBUG.log</file>
        <append>true</append>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{35} -
                %msg%n</pattern>
        </encoder>
    </appender>


    <appender name="FILE-ENGINE-ERROR" class="ch.qos.logback.core.FileAppender">
        <file>${USER_HOME}/${log.name}.error</file>
        <append>true</append>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} -
                %msg%n</pattern>
        </encoder>
    </appender>


    <logger name="com.code" level="debug" additivity="false">
        <appender-ref ref="FILE-ENGINE" />
        <appender-ref ref="FILE-UI" />

    </logger>

    <root level="Error">
        <appender-ref ref="FILE-ENGINE-ERROR" />
    </root>

</configuration>

请帮助我如何在 else 条件下编写日志。提前致谢。

【问题讨论】:

标签: java logback


【解决方案1】:

您的配置看起来错误,您甚至在创建之前就引用了 appender。如果 atoll logback 支持维护会很繁琐,因为您需要为您为不同包设置的每个日志级别添加 appender 引用。

以下是您可以写入不同文件的两种方法。

  1. 只需更改文件
    <appender name="fileAppender1" class="ch.qos.logback.core.FileAppender">
        <if condition='property("type").contains("DEV")'>
            <then>
                <file>${USER_HOME}/${log.name}.log</file>
            </then>
            <else>
                <file>${USER_HOME2}/${log.name}.log</file>
            </else>
        </if>
        <append>true</append>
        <encoder>
           <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{35} -
            %msg%n</pattern>
        </encoder>
    </appender>
  1. 您可以在 if 条件下直接创建附加程序。但是,您需要先自己创建附加程序。
    <if condition='property("type").contains("DEV")'>
    <then>
        <appender name="fileAppender1" class="ch.qos.logback.core.FileAppender">
        <file>${USER_HOME}/${log.name}.log</file>
        <append>true</append>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{35} -
                %msg%n</pattern>
            </encoder>
        </appender>
    </then>
    <else>
        <appender name="fileAppender1" class="ch.qos.logback.core.FileAppender">
        <file>${USER_HOME2}/${log.name}.log</file>
        <append>true</append>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{35} -
                %msg%n</pattern>
            </encoder>
        </appender>
    </else>
    </if>

    <root level="DEBUG">
        <appender-ref ref="fileAppender1" />
    </root>

如果其他条件可以工作,你需要在你的类路径中有 janino.jar,如果你使用的是 maven,你可以添加依赖项。

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

【讨论】:

  • 您好,Karthik 感谢您提供信息。如果我在其他部分使用不同的附加程序类(例如) ch.qos.logback.core.rolling.RollingFileAppender 不工作,即不写日志。你能告诉我帮助我吗?
  • @J2EEDeveloper 你能说出你是如何设置这个属性类型的吗?
  • @karthik 你能告诉我如何在java中设置属性类型&lt;if condition='property("type").contains("DEV")'&gt;
  • 您的答案是否有任何文档?如何比较两个变量?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 2012-09-20
相关资源
最近更新 更多