java - 如何在日志文件名中附加日期,例如 log_12.12.2012.log?

标签 java xml logging log4j rollingfileappender

我知道 DailyRollingFileAppender 会为我做这件事。但是当我的文件大小达到指定大小时,它不支持最大文件大小。

<appender name="fileAppender" class="org.apache.log4j.RollingFileAppender">

    <param name="Threshold" value="ALL" />
    <param name="MaxFileSize" value="50KB" />
    <param name="MaxBackupIndex" value="10" />
    <param name="File" value="F:/logs/Testing/MyProject.log" /> 

    <layout class="org.apache.log4j.PatternLayout"> 
          <param name="ConversionPattern" value="%d{MMM-dd-yyyy HH:mm:ss:SSS} %-5p %m%n"/>
    </layout>
</appender>

我想创建类似于 MyProject_12.12.2012.log 的文件名。

我的需要是,

  1. 我的日志文件需要支持最大文件大小

  2. 每个日志文件都有唯一的名称和日期。

希望我们的堆栈用户能够帮助我。

最佳答案

公共(public)空间有几种可用的实现,但实际上重写 RollingFileAppender 更容易

例如:

public class MyRollingAppender extends RollingFileAppender {

Long nextCheck=System.currentTimeMillis () - 1;
public static final SimpleDateFormat FORMAT=new SimpleDateFormat("yyyyMMdd");
String fileNameOriginal=null;

private void rollFile() {
    this.closeFile();
    GregorianCalendar calendar=new GregorianCalendar();
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    calendar.add(Calendar.DATE, 1);

    nextCheck=calendar.getTimeInMillis();
    this.setFile(fileNameOriginal);
    this.activateOptions();
}

@Override
protected void subAppend(LoggingEvent event) {
    Long n=System.currentTimeMillis ();
    if (n>nextCheck) {
        rollFile();
    }
    super.subAppend(event);
}

@Override
public void setFile(String file) {
    fileNameOriginal=file;
    super.setFile(file + FORMAT.format(new Date()) +".log");
}

}

您可以根据自己的具体需求进行调整

关于java - 如何在日志文件名中附加日期,例如 log_12.12.2012.log?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20539781/

相关文章:

java 。在构造函数中初始化列表

c# - 从 Web 服务读取 XML 节点

xml - xslt 删除部分属性

multithreading - Tcl的线程安全记录器

python - 完整的日志管理(python)

java - 程序可以在 Eclipse 调试器中运行,但不能在其他地方运行...?

java - 在 Java 中使用匿名类被认为是不好的风格还是好的?

java - 如何将 Jooq 用于尚不存在的表?

PHP 和 XML : Dlvr. 它不起作用

logging - 主管不写更多的日志