Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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 如何设置RollingFileAppender的最大总磁盘大小?_Java_Log4j - Fatal编程技术网

Java 如何设置RollingFileAppender的最大总磁盘大小?

Java 如何设置RollingFileAppender的最大总磁盘大小?,java,log4j,Java,Log4j,我正在使用log4j和log4j.extras创建一个RollingFileAppender,它在两种情况下滚动: 工作文件大小超过了MaxFileSize阈值 系统的日期更改 接下来,附加程序需要一个TimeBasedRollingPolicy和一个SizeBasedTriggeringpolicy,例如: <appender name="file_logger" class="org.apache.log4j.rolling.RollingFileAppender"> &

我正在使用
log4j
log4j.extras
创建一个RollingFileAppender,它在两种情况下滚动:

  • 工作文件大小超过了
    MaxFileSize
    阈值
  • 系统的日期更改
  • 接下来,附加程序需要一个
    TimeBasedRollingPolicy
    和一个
    SizeBasedTriggeringpolicy
    ,例如:

    <appender name="file_logger" class="org.apache.log4j.rolling.RollingFileAppender">
        <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
            <param name="ActiveFileName" value="/fxh/logs/D3FIXFeeds.log" />
            <param name="FileNamePattern" value="/fxh/logs/D3FIXFeeds.%d{HH-mm}.%i.log" />        
        </rollingPolicy>
        <triggeringPolicy
            class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy">
            <param name="MaxFileSize" value="50000" /> <!--  in bytes -->
        </triggeringPolicy>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p - %m%n" />
        </layout>
    </appender>
    
    也不是

    
    ...
    
    根据postTimeBasedRollingPolicy不适用于MaxBackupIndex

    但是你可以用这个。它有一个按时间或日期的日志文件滚动最大文件大小和一个最大备份文件数参数

    我不认为有一个log4j appender可以观察目录的总大小。在我看来,这更像是一项家政工作,而不是伐木工人的工作。甚至比日志追加器提供的目录大小限制更为通用。
    您可以使用一个外部脚本(例如,由cron触发),它可以像这样进行目录清理

    正如@Arigion所说,log4j似乎不能满足你的要求,但幸运的是,它能做到。它提供和,允许您创建随大小和时间滚动的日志,并遵守总存储限制,如下所示:

    <appender name="file_logger" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>/fxh/logs/D3FIXFeeds.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>/fxh/logs/D3FIXFeeds.%d{HH-mm}.%i.log</fileNamePattern>
       <maxFileSize>500KB</maxFileSize>    
       <maxHistory>60</maxHistory>
       <totalSizeCap>40GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p - %m%n</pattern>
    </encoder>
    </appender>
    
    
    /fxh/logs/D3FIXFeeds.log
    /fxh/logs/D3FIXFeeds.%d{HH mm}.%i.log
    500KB
    60
    40GB
    %d{yyyy-MM-dd HH:MM:ss}%-5p-%m%n
    

    这不是一个有效的示例,因为我刚刚对字段使用了best guess,但请让我知道它是如何运行的。

    我想说,使用log4j v1,您无法控制日志文件的总体大小,只有在log4j2 v2.5中,他们添加了删除操作,该操作可用于根据最后一个日志文件的总体大小或时间戳删除日志。
    <appender name="file_logger" class="org.apache.log4j.rolling.RollingFileAppender">
        <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
               <param name="ActiveFileName" value="/fxh/logs/D3FIXFeeds.log" />
               <param name="FileNamePattern" value="/fxh/logs/D3FIXFeeds.%d{HH-mm}.%i.log" />   
               <param name="MaxBackupIndex" value="5"/>    
               ...
    
    <appender name="file_logger" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>/fxh/logs/D3FIXFeeds.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>/fxh/logs/D3FIXFeeds.%d{HH-mm}.%i.log</fileNamePattern>
       <maxFileSize>500KB</maxFileSize>    
       <maxHistory>60</maxHistory>
       <totalSizeCap>40GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p - %m%n</pattern>
    </encoder>
    </appender>