Java 强制Log4J每天创建一个新文件(可能为空)

Java 强制Log4J每天创建一个新文件(可能为空),java,log4j,rollingfileappender,Java,Log4j,Rollingfileappender,我将log4j配置为write,并使用DailRollingFileAppenders将日志条目写入一些不同的文件。 在这种情况下,其中一个日志是特殊的,它是所有其他日志的摘要,其阈值是warn(与其他日志不同的是info) 这背后的想法很简单:如果一天没有条目,那么一切都很好,不需要查看详细日志 Log4J在写入当天的第一个条目时滚动该文件-因此,如果打开该日志而当天没有写入任何条目,该日志将显示天以前的条目 有没有一种方法可以强制log4j每天滚动一个文件而不需要日志条目?或者在启动时滚动

我将log4j配置为write,并使用DailRollingFileAppenders将日志条目写入一些不同的文件。 在这种情况下,其中一个日志是特殊的,它是所有其他日志的摘要,其阈值是warn(与其他日志不同的是info)

这背后的想法很简单:如果一天没有条目,那么一切都很好,不需要查看详细日志

Log4J在写入当天的第一个条目时滚动该文件-因此,如果打开该日志而当天没有写入任何条目,该日志将显示天以前的条目

有没有一种方法可以强制log4j每天滚动一个文件而不需要日志条目?或者在启动时滚动

编辑:以下是属性:

**snipped**
log4j.appender.empty=org.apache.log4j.DailyRollingFileAppender
log4j.appender.empty.MaxBackups=30
log4j.appender.empty.Append=true
log4j.appender.empty.File=/some/dir/shouldBeEmpty.txt
log4j.appender.empty.layout=org.apache.log4j.PatternLayout
log4j.appender.empty.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
**snipped**

可以肯定的是:我知道,我可以在夜间启动时调用默认警告,这将滚动该文件。但问题是,是否可以在不记录日志的情况下进行滚动。

您可以使用两个简单的类和命令从代码中设置log4j配置。因此,首先在java.util.Properties中加载整个log4j数据(您提供的问题),然后在
org.apache.log4j.PropertyConfigurator
中设置它。因此,您可以从自己的
log4j.appender.file.file
中获取值

例如:

String fileName=“///some//dir//“++{DD_MM_YY}+.txt”`
log4jData+=“log4j.appender.empty.File=“+fileName`
现在,如果您可以通过代码设置一次,您可以根据需要设置多次。创建一名工人,负责两件事:

  • 如果应用程序启动/重新启动,则设置所需的log4j属性和
  • 在一段时间(如24小时)后配置新的log4j属性(基于您的数据)

  • 希望它能起作用。对不起,我的英语不好。

    您正在搜索的是
    保管人日常收集文件附件。
    这是可以找到的

    以下是xml属性文件中的用法示例:

    <appender name="CDRFA" class="de.pickert.utils.logger.CustodianDailyRollingFileAppender">
        <param name="File" value="log/filename.log" />
        <param name="Append" value="true" />
        <param name="DatePattern" value ="yyyy-MM-dd"/>
        <param name="CompressBackups" value ="true"/>
        <!-- param name="MaxFileSize" value ="100mb"/>
        <param name="MaxNumbersOfDays" value ="14"/>
        <param name="DeleteFile" value ="false"/-->
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%p %C %d{yyyy-MM-dd HH\:mm\:ss.SSS} %m \n" />
        </layout>
    </appender>
    

    你能举个例子吗,比如我有一个file.log,它应该在凌晨12点移动到file.log.1或类似的位置吗?你总是可以通过文件在操作系统中最后一次修改的标记来判断条目来自哪一天。@almas shaikh-抱歉,缺少什么?DailyRollingFileAppender是否可以在不需要写入日志项的情况下强制滚动?我将添加使用过的属性。@zoltan-是的,你是对的。每个条目都有一个时间戳。但是这些文件是通过http提供的,对于非开发人员来说,这是查看此服务器是否存在问题的第一个角度,因此应该是“empty log>OK”这样简单的方式,谢谢。你的英语很好,我写问题时总是遇到同样的问题:-)。好啊您的解决方案是硬(编码)方式。如果这真的是唯一的解决方案,那么我更愿意在启动时记录一个虚拟警告,并让log4j来完成。我希望我在文档中读到了一个简单的“切换”。是的,这是一个使用代码的解决方案,它可能不是最好的解决方案。希望您能使用log4j函数(而不是硬编码)找到更好的解决方案。祝你好运。我找到了一个系统信息日志,反正每天都有。我现在发出了一个警告,因为服务器每天早上都会重新启动,所以只要重新启动,这将满足我的需要。我将尝试,当服务器不会每晚重新启动时。谢谢。
    <rollingPolicy class="TimeBasedRollingPolicy">
        <param name="fileNamePattern" value="filename-pattern"/>
        <param name="rollOver" value="TRUE | FALSE"/>
    </rollingPolicy>
    
    Quit not sure if this fits your needs