if logback in logback - 在两个不同的文件夹中打印日志消息

时间:2017-01-18 09:08:11

标签: java logback

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

简单来说,如何使用两个不同的appender基于If else条件将日志写入两个不同的文件夹中。

代码是:

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

整个配置文件是:

<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>

请帮我看看如何用else条件写日志。在此先感谢。

1 个答案:

答案 0 :(得分:7)

您的配置看起来有误,即使在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>
    
  2. 您可以在if条件下直接创建appender。但是你需要首先自己创建appender。

    <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>
    
  3. 要使if else条件工作,你需要在你的类路径中使用janino.jar,如果你使用maven,你可以添加依赖。

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