我需要为java应用生成2个日志文件。一个是系统管理员,他们只想看到任何INFO或更高的东西。他们不希望看到TRACE或DEBUG级别,这大大增加了日志文件的大小。但是我们还想生成一个日志文件,如果出现问题可以发送给工程师。工程师将需要所有细节。这将包括所有级别:TRACE,DEBUG,INFO,WARN和ERROR。我认为这很简单:
<logger level="INFO" additivity="false" name="com.mycompany">
<appender-ref ref="NOT_DETAILED_FILE" />
</logger>
<logger level="TRACE" additivity="true" name="com.mycompany">
<appender-ref ref="DETAILED_FILE" />
</logger>
但我没有得到我的预期。 TRACE级别的消息将进入常规文件。我读过有关自定义logback过滤器的内容。但这真的必然吗?这似乎是一个相当简单的用例。
答案 0 :(得分:0)
找到答案。删除为包“com.mycompany”定义的第二个记录器。这没有意义。诀窍是在附件中添加一个“不详细”的过滤器。
<appender name="NOT_DETAILED_FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/not-detailed.log</file>
<append>false</append>
<encoder>
<pattern>%date{HH:mm:ss} %-5level %logger{175} - %msg%n</pattern>
</encoder>
<!-- filter out any messages lower than INFO, like DEBUG or TRACE -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<appender name="DETAILED_FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/detailed.log</file>
<append>false</append>
<encoder>
<pattern>%date{HH:mm:ss} %-5level %logger{175} - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.mycompany" level="trace"/>
<root level="warn">
<appender-ref ref="DETAILED_FILE" />
<appender-ref ref="NOT_DETAILED_FILE" />
</root>