有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在每次程序执行时在log4j中创建日志文件?

我目前正在使用log4j中的DailyRollingFileAppender类进行每日日志文件追加,但我希望日志文件按以下格式分开:

DATA.log.<date>_<time>_<random_#>

这应该在每个程序执行时执行一次,所以我最终会得到如下结果

DATA.log.2011-01-13_12-46-38_<26>
DATA.log.2011-01-13_12-46-38_<79>
DATA.log.2011-01-13_12-46-38_<590>

来自不同环境的不同日志文件可以汇集在一起

在不扩展FileAppender类的情况下,是否仍然可以执行此操作?至少,有没有办法做到:

DATA.log.<date>_<time>_<sequential_#>.log

谢谢

编辑:我已经在使用DailRollingFileAppender来获取类似数据的东西。日志2011-01-13. 我想知道的是如何让日志文件在每次程序执行之后(或每次程序执行之前)滚动,并在最后添加一个随机数字字符串


共 (2) 个答案

  1. # 1 楼答案

    看看:Setting a log file name to include current date in Log4j

    编辑: 将此类添加到项目中,并将其用作追加器:

    import java.util.Random;
    
    import org.apache.log4j.DailyRollingFileAppender;
    
    public class MyAppender extends DailyRollingFileAppender {    
        @Override
        public void  setFile(String fileName) {
            if (fileName.indexOf("%rnd") >= 0) {
                Random r = new Random();
                fileName = fileName.replaceAll("%rnd", Integer.toString(r.nextInt()));
            }
            super.setFile(fileName);
        }
    }
    

    然后只需将appender的文件名设置为:filename.%rnd。日志

    log4j.appender.R=MyAppender.MyAppender
    log4j.appender.R.File=.\\test.%rnd.log
    
  2. # 2 楼答案

    在代码中设置一个新的环境属性:

    randomString = Long.toString(Math.abs((new Random()).nextLong()), Character.MAX_RADIX);
    System.setProperty("randomString", randomString);
    

    然后,在log4j文件中,使用${randomString}使用该变量

    希望有帮助