Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.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 Log4j中带有日期的文件名_Java_Tomcat_Logging_Log4j - Fatal编程技术网

Java Log4j中带有日期的文件名

Java Log4j中带有日期的文件名,java,tomcat,logging,log4j,Java,Tomcat,Logging,Log4j,我正在尝试将当前日期附加到log4j日志文件。所以应该是这样的: myApp-2011-01-07.log 问题是我不想使用DailRollingFileAppender。原因是,将有另一个脚本每天运行,将备份日志文件夹中的所有内容。 这是在Tomcat5.5下运行的 这在log4j中可能吗?我认为您可以在代码中设置一个系统属性来包含当前日期: static{ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd")

我正在尝试将当前日期附加到log4j日志文件。所以应该是这样的:

myApp-2011-01-07.log

问题是我不想使用DailRollingFileAppender。原因是,将有另一个脚本每天运行,将备份日志文件夹中的所有内容。 这是在Tomcat5.5下运行的


这在log4j中可能吗?

我认为您可以在代码中设置一个系统属性来包含当前日期:

static{
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    System.setProperty("current.date", dateFormat.format(new Date()));
}
然后,在您的log4j.xml文件中,您可以在appender中指定日志文件名时使用system属性:

<appender name="MYAPPENDER" class="org.apache.log4j.FileAppender">
    <param name="File" value="${user.home}/myApp-${current.date}.log" />


ETA:现在我考虑一下,您可能必须使用静态初始值设定项设置系统属性,以确保在配置log4j之前设置该属性。

尝试在
log4j.properties
文件中设置该属性:

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=example.log
更多信息可以在这里找到

只需创建自己的Appender,您就可以快速且高度可维护地管理它

只需创建一个如下所示的类:

    import java.text.SimpleDateFormat;
    import java.util.Date;
    import org.apache.log4j.FileAppender;

    public class CustomFileAppender extends  FileAppender{

    @Override
    public void setFile(String fileName)
    {
        if (fileName.indexOf("%timestamp") >= 0) {
            Date d = new Date();
            SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSS");
            fileName = fileName.replaceAll("%timestamp", format.format(d));
        }
        super.setFile(fileName);
   }
}
并将其放置在您的属性中:

   log4j.appender.file=com.portima.filenet.brio.ops.tools.CustomFileAppender
   log4j.appender.file.File=${log}/general.%timestamp.log

现在,您可以提供任何类型的文件名。

对不起,您不想将其滚动到新日期吗?那么午夜会发生什么呢?那么,如果我将日志设置为午夜旋转,那么旧的日志文件会发生什么呢?每个日志文件上都有一个文件日期戳,因此我担心目录中会有几个月的日志文件。它会为新的日期和日期创建一个新文件吗?或者它只会创建一次?我已经有一段时间没有看过log4j了,但是我认为我给出的示例只会为您开始流程的那天创建一个日志文件。如果您每天都想要一个新的日志文件,请在log4j.xml中使用“RollingFileAppender”。