Log4j中的日期文件名

Mar*_*nio 6 java logging tomcat log4j log4

我正在尝试将当前日期追加到log4j日志文件中.所以它会是这样的:

对myApp-2011-01-07.log

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

这可能在log4j中吗?

Ben*_*nus 14

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

static{
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    System.setProperty("current.date", dateFormat.format(new Date()));
}
Run Code Online (Sandbox Code Playgroud)

然后在log4j.xml文件中,在appender中指定日志文件名时可以使用system属性:

<appender name="MYAPPENDER" class="org.apache.log4j.FileAppender">
    <param name="File" value="${user.home}/myApp-${current.date}.log" />
Run Code Online (Sandbox Code Playgroud)

ETA:现在我考虑一下,您可能必须使用静态初始化程序设置系统属性,以确保在配置log4j之前设置属性.


小智 11

只需创建自己的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);
   }
}
Run Code Online (Sandbox Code Playgroud)

并将其放在您的属性中:

   log4j.appender.file=com.portima.filenet.brio.ops.tools.CustomFileAppender
   log4j.appender.file.File=${log}/general.%timestamp.log
Run Code Online (Sandbox Code Playgroud)

现在您可以提供您想要的任何类型的文件名.


Rat*_*kar 5

尝试在您的log4j.properties文件中设置:

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=example.log
Run Code Online (Sandbox Code Playgroud)

更多信息可以在这里找到 http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html