Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Play framework中记录文件中的数据?_Java_Logging_Playframework_Playframework 2.3 - Fatal编程技术网

Java 如何在Play framework中记录文件中的数据?

Java 如何在Play framework中记录文件中的数据?,java,logging,playframework,playframework-2.3,Java,Logging,Playframework,Playframework 2.3,我有一个用Java实现的Play服务器(Play framework 2.3)。我想在文件中保留API调用日志,限制最大文件数和每个文件的最大大小。我有下面的application logger.xml文件 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/home/ajay/projects/application.log</file&

我有一个用Java实现的Play服务器(Play framework 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>
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");
这就是它不起作用的原因吗?请建议如何修复它。

试试这个附件:

 <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>

${application.home}/logs/agent.log
${application.home}/logs/old/myLog-%d{yyyy-MM-dd}.log。%i
30
100MB
%日期%M%logger{0}%消息%n

在文件名模式中,放入应用程序主路径。

appender的immediateFlush
属性设置为false,因此您不会立即在access.log文件中看到任何更改。移除

<immediateFlush>false</immediateFlush>
false
从配置xml中删除行


立即刷新输出流可确保日志事件立即写入磁盘,并且在应用程序退出而未正确关闭appender时不会丢失日志事件。

如果改用log4j会发生什么<代码>导入org.slf4j.LoggerFactory;/*(…)*/LoggerFactory.getLogger(“访问”).error(“只是一个测试”)@Salem我试过了,但似乎不起作用。所有日志仅写入
application.log
文件。可能是由于“immediateFlush”属性设置为false,您没有“立即”看到日志。