我配置了log4j来编写使用DailyRollingFileAppenders将日志条目写入一些不同的文件。 其中一个日志在这种情况下是特殊的,它是所有其他日志的摘要,它的阈值是警告(不像其他日志那样)。
这背后的想法很简单:如果一天没有条目,一切都很好,没有必要查看详细日志。
当写入当天的第一个条目时,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**
只是为了确定:我知道,我可以在夜间启动时调用默认警告,这将滚动该文件。但问题是,如果可以在没有记录的情况下滚动。
答案 0 :(得分:0)
您可以使用两个简单的类java.util.Properties和org.apache.log4j.PropertyConfigurator从代码设置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;`
现在,如果您可以通过代码设置一次,则可以根据需要多次设置。创建一个工作人员,负责两件事:
希望它能奏效。抱歉我的英语不好。
答案 1 :(得分:0)
您要搜索的是CustodianDailyRollingFileAppender
。
可以找到here。
以下是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>
修改强> 还没有看到你想要创建一个空文件。 也许这会有所帮助:
TimeBasedRollingPolicy
指定使用包含当前日期的日志文件名。使用此策略时,无需为triggeringPolicy指定值。要指定何时创建新日志文件,您可以指定以下任一选项:
使用以下语法指定TimeBasedRollingPolicy:
<rollingPolicy class="TimeBasedRollingPolicy">
<param name="fileNamePattern" value="filename-pattern"/>
<param name="rollOver" value="TRUE | FALSE"/>
</rollingPolicy>
name =“fileNamePattern”value =“ path-and-filename-pattern ”
指定日志文件的写入路径以及用于创建日志文件名的转换模式。转换模式可包括以下字符:
<强>%d 强> 表示当前日期的显示位置。如果希望日期以yyyymmdd以外的格式显示,或者如果要包含其他信息(如小时),则可以在%d之后的大括号中指定日期格式或日期和时间模式。
<强>%S {键} 强> 表示系统信息(例如主机名,操作系统或系统描述)的显示位置。您必须指定一个键以指示出现的系统信息的类型。
例如,如果要将日志文件写入路径c:\ logs \,并指定包含当前日期和名称的文件名,请指定c:\ logs \ MetadataServer_%d_%S {host_name} .log元数据服务器主机。
默认:无
必填:是
交互:路径和文件名被您为path-and-filename指定的任何值覆盖。
name =“rollOver”value =“TRUE | FALSE”
指示每当生成的文件名与当前文件名不同时是否创建新的日志文件。指定以下值之一:
<强> TRUE 强>
只要生成的文件名与当前文件名不同,就会创建(翻转到)新文件。
Quit not sure if this fits your needs
<强> FALSE 强>
仅在新会话开始时创建新的日志文件。
默认值: TRUE
必填:否