Можете ли вы предоставить два уровня для одного и того же пакета
Можем ли мы установить уровень ОШИБКИ и ИНФО на уровне приложения?
Я использую 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) для предоставления данных в другом файле.
Моя цель - записать данные ОШИБКИ в один файл и данные INFO в другой файл.
1 ответ
Что вам нужно, это levelfilter в appender, настройте ERROR для фильтра уровня для appder, исключающего ошибку, как показано ниже
<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>
Я предполагаю, что вы ищете для регистрации только информацию и журналы ошибок в двух отдельных файлах, иначе вам может понадобиться расширить фильтр.