можете ли вы предоставить два уровня для одного и того же пакета

можем ли мы установить уровень 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>

Я узнаю, что приложение будет выполнять часть записи (вывод). Регистратор перенаправит его в правильное приложение со своим свойством.

Здесь, в моем случае, мне нужно, чтобы один и тот же пакет использовался на другом уровне регистратора (INFO/ERROR) для предоставления данных в другом файле.

Моя цель - записать данные ERROR в один файл и данные INFO в другой файл.


person kumar    schedule 03.03.2015    source источник


Ответы (1)


Что вам нужно, это levelfilter в приложении, настроить фильтр уровня 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>

Я предполагаю, что вы ищете регистрацию только информации и журналов ошибок в двух отдельных файлах, иначе вам может потребоваться расширить фильтр.

person Karthik Prasad    schedule 04.03.2015
comment
В моем случае, если у меня есть 2 регистратора с одним и тем же пакетом, последний определен в переопределениях файла, а предыдущий регистратор не учитывался. - person Naveen; 13.12.2018