【问题标题】:can you provide two levels for the same package你能为同一个包提供两个级别吗
【发布时间】:2015-03-03 08:57:58
【问题描述】:

我们可以在 appender 级别设置 ERROR 和 INFO 级别吗?

我正在使用 logback.xml

我的 logback.xml

    <configuration>
        <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%5p [%t] %m%n</pattern>
            </encoder>
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>DEBUG</level>
            </filter>
        </appender>
        <appender name="default-out" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- Rolling file appender for rolling files -->
            <param name="File" value="logs/app-track-log.log" />
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- daily rollover -->
                <fileNamePattern>logs/app-track-log-%d{yyyy-MM-dd}.log</fileNamePattern>

                <!-- keep 30 days' worth of history -->
                <maxHistory>30</maxHistory>
            </rollingPolicy>
            <param name="encoding" value="UTF-8" />
            <encoder>
                <pattern>%-30([web] %d{HH:mm:ss.SSS} [%thread]) %-5level %logger{32} - %msg%n</pattern>
            </encoder>
        </appender>

        <appender name="error-out" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- Rolling file appender for rolling files -->
            <param name="File" value="logs/error/app-error.log" />
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- daily rollover -->
                <fileNamePattern>app-error.%d{yyyy-MM-dd}.log</fileNamePattern>
                <!-- keep 30 days' worth of history -->
                <maxHistory>30</maxHistory>
            </rollingPolicy>
            <param name="encoding" value="UTF-8" />
            <encoder>
                <pattern>%-30([web] %d{HH:mm:ss.SSS} [%thread]) %-5level %logger{32} - %msg%n</pattern>
            </encoder>
        </appender>
<!--here the logger to initiate the write operation -->
        <logger name="org.company.controllers" level="ERROR" >
            <appender-ref ref="error-out" /> 
        </logger>

    <logger name="org.company.controllers" level="INFO" >
    <appender-ref ref="default-out" /> 
    </logger>

        <root level="OFF">
            <appender-ref ref="default-out"  />
        </root>
    </configuration>

我知道 appender 将执行写入部分(输出)。logger 将使用它的属性将其重定向到正确的 appender。

在我的情况下,我需要在不同的记录器级别(INFO/ERROR)中使用相同的包来提供不同文件中的数据。

我的目标是在一个文件中写入 ERROR 数据,在另一个文件中写入 INFO 数据。

【问题讨论】:

    标签: logback logback-groovy


    【解决方案1】:

    你需要的是appender中的levelfilter,为error-out appender配置level filter ERROR如下所示

           <appender name="error-out" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- Rolling file appender for rolling files -->
                <param name="File" value="logs/error/app-error.log" />
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                    <!-- daily rollover -->
                    <fileNamePattern>app-error.%d{yyyy-MM-dd}.log</fileNamePattern>
                    <!-- keep 30 days' worth of history -->
                    <maxHistory>30</maxHistory>
                </rollingPolicy>
                <param name="encoding" value="UTF-8" />
                <filter class="ch.qos.logback.classic.filter.LevelFilter">
                    <level>ERROR</level>
                    <onMatch>ACCEPT</onMatch>
                    <onMismatch>DENY</onMismatch>
                </filter>
                <encoder>
                    <pattern>%-30([web] %d{HH:mm:ss.SSS} [%thread]) %-5level %logger{32} - %msg%n</pattern>
                </encoder>
            </appender>
    

    对于信息记录

    <appender name="default-out" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- Rolling file appender for rolling files -->
                <param name="File" value="logs/app-track-log.log" />
                <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                    <!-- daily rollover -->
                    <fileNamePattern>logs/app-track-log-%d{yyyy-MM-dd}.log</fileNamePattern>
    
                    <!-- keep 30 days' worth of history -->
                    <maxHistory>30</maxHistory>
                </rollingPolicy>
                <param name="encoding" value="UTF-8" />
                <filter class="ch.qos.logback.classic.filter.LevelFilter">
                    <level>INFO</level>
                    <onMatch>ACCEPT</onMatch>
                    <onMismatch>DENY</onMismatch>
                </filter>
                <encoder>
                    <pattern>%-30([web] %d{HH:mm:ss.SSS} [%thread]) %-5level %logger{32} - %msg%n</pattern>
                </encoder>
            </appender>
    

    我假设您在两个单独的文件中寻找仅记录信息和错误日志,否则您可能需要扩展过滤器。

    【讨论】:

    • 在我的情况下,如果我有 2 个具有相同包的记录器,则在文件覆盖中定义最新的记录器并且不考虑以前的记录器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 2014-01-07
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多