我有一个用Java实现的Play服务器(Play框架2.3)。我想在文件中保留API调用的日志,限制文件的最大数量和每个文件的最大大小。我有以下application-logger.xml
文件
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/home/ajay/projects/application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- Daily rollover with compression -->
<fileNamePattern>application-log-%d{yyyy-MM-dd}.gz</fileNamePattern>
<!-- keep 30 days worth of history -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss ZZZZ} - [%level] - from %logger in %thread %n%message%n%xException%n</pattern>
</encoder>
</appender>
<appender name="ACCESS_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/home/ajay/projects/access.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover with compression -->
<fileNamePattern>access-log-%d{yyyy-MM-dd}.gz</fileNamePattern>
<!-- keep 1 week worth of history -->
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss ZZZZ} %message%n</pattern>
<!-- this quadruples logging throughput -->
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<!-- additivity=false ensures access log data only goes to the access log -->
<logger name="access" level="INFO" additivity="false">
<appender-ref ref="ACCESS_FILE" />
</logger>
<root level="INFO">
<appender-ref ref="FILE"/>
</root>
我从here获取的。 我不完全了解上述配置。我使用以下行登录access.log
文件
import play.Logger;
// log in the access.log file
final Logger.ALogger accessLogger = Logger.of("access");
accessLogger.info("Logging api call from the client");
然而,它不起作用。所有日志记录都转到access.log
文件时,application.log
文件为空。我在application.conf
中注释掉了所有记录器设置。当我查看文件Logger.class
时,我发现了这一行
private static final ALogger logger = of("application");
这是它无法正常工作的原因吗?请建议我如何解决它。
答案 0 :(得分:1)
试试这个appender:
<appender name="CUSTOM" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${application.home}/logs/agent.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${application.home}/logs/old/myLog-%d{yyyy-MM-dd}.log.%i</fileNamePattern>
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%date %M %logger{0} %message%n</pattern>
</encoder>
</appender>
在文件名模式中放置应用程序主路径。
答案 1 :(得分:0)
immediateFlush
属性设置为false,因此您不会立即在access.log文件中看到任何更改。只需删除
<immediateFlush>false</immediateFlush>
从您的配置xml开始。
From the logback documentation:立即刷新输出流可确保将日志记录事件立即写入磁盘,并且在应用程序退出而未正确关闭appender的情况下不会丢失。