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

J2E*_*per 3 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>
Run Code Online (Sandbox Code Playgroud)

整个配置文件是:

<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>
Run Code Online (Sandbox Code Playgroud)

请帮我如何用else条件写日志.提前致谢.

Kar*_*sad 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>
    
    Run Code Online (Sandbox Code Playgroud)
  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>
    
    Run Code Online (Sandbox Code Playgroud)

而对于if else条件的工作,你需要在你的类路径中有janino.jar,如果你使用maven,你可以添加依赖.

        <dependency>
            <groupId>org.codehaus.janino</groupId>
            <artifactId>janino</artifactId>
            <version>3.0.6</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)