我使用https://logback.qos.ch/进行长期运行的Java程序。 有没有办法配置一些appender只记录程序的前N行?
例如,我的程序在启动时记录重要信息,但如果我使用滚动文件appender,则最终会删除启动时的日志。
我在log4j
中找到了如何执行此操作,如下所示:
<appender name="StartupAppender" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="${samza.log.dir}/${samza.container.name}-startup.log" />
<param name="MaxFileSize" value="256MB" />
<param name="MaxBackupIndex" value="1" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} [%p] %m%n" />
</layout>
</appender>
<logger name="STARTUP_LOGGER" additivity="false">
<level value="info" />
<appender-ref ref="StartupAppender"/>
</logger>
如何在Logback中执行此操作?
答案 0 :(得分:1)
没有固定的,预先存在的Logback appender将“仅使用Logback记录前N行”我建议您使用Logback现有的rollingPolicy
和triggeringPolicy
实现来创建Logback配置与您在Log4J中使用的配置相匹配。
您问题中StartupAppender
的Logback等效项是:
<appender name="StartupAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${samza.log.dir}/${samza.container.name}-startup.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${samza.log.dir}/${samza.container.name}-startup.log.%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>1</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>256MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} [%p] %m%n</pattern>
</encoder>
</appender>
<logger name="STARTUP_LOGGER" additivity="false">
<level value="info" />
<appender-ref ref="StartupAppender"/>
</logger>
这与你的Log4J StartupAppender
的行为相同,但就像那个appender一样,它不能保证保留“程序的前N行”,因为它会在达到256MB时翻转。但是,由于您只是将此appender与记录器STARTUP_LOGGER
相关联,因此256MB可能足以保留“启动日志”的冗长历史记录。