java - 每天如何将日志文件存储在目录(具有当前日期的目录名称)中

标签 java date logging directory logfile

下面的代码创建一个名称为当前日期的目录并将日志文件存储在该目录中,但是第二天日志文件将数据存储在同一目录中...我想每天创建一个与当前日期同名并存储新目录里面有新的日志文件。

私有静态日期dir1 = new java.util.Date(System.currentTimeMillis());

私有静态Date dir = new java.util.Date(System.currentTimeMillis());

私有静态字符串baseDir1 =“ / home / gaurav / flinklogs /”;

私有静态字符串newDir1 = createDateBasedDirectory(baseDir1,dir1);

私有静态FileHandler fh1;

  static {

                try {

                fh1 = new FileHandler(newDir1 + "/data.log", 0, 1, true);

                } catch (IOException | SecurityException e) {

                }
            }


公共静态void main(String args [])引发异常{

Logger logger = Logger.getLogger("MyLog");
                // This block configure the logger with handler and formatter
logger.addHandler(fh);

SimpleFormatter formatter = new SimpleFormatter();

fh.setFormatter(formatter);

       // the following statement is used to log any messages

logger.info(e.getMessage());  

                   }



   public static String createDateBasedDirectory(String baseDirectory, Date argDate) 
    {

    String newDir = null;


    if (baseDirectory != null && argDate != null) {

                try {

                    String format = "yyyy-MM-dd";

                    DateFormat dateFormatter = new SimpleDateFormat(format);

                    String date = dateFormatter.format(argDate);

                    // check if the directory exists:

                    String todaysLogDir = baseDirectory + "\\" + date;

                    Path todaysDirectoryPath = Paths.get(todaysLogDir);
                    // and check if this Path exists
                    if (Files.exists(todaysDirectoryPath)) {

      // if present, just return it in order to write (into) a log file there

            return todaysDirectoryPath.toUri().toString();

        } else {

                  newDir = baseDirectory + date;

                  new File(newDir).mkdir();

                  return newDir.toString();

   }           
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return newDir;
        }

最佳答案

这里的问题是,您已将所有变量声明为静态变量,并且还在静态块中执行文件处理程序分配。

static {

        try {

            fh1 = new FileHandler(newDir1 + "/data.log", 0, 1, true);

        } catch (IOException | SecurityException e) {

        }
    }


因此,一旦您的程序启动,它将初始化所有内容,然后第二天就不会重新初始化,因为该程序已从前一天开始运行。
您需要随着日期的变化重新分配文件处理程序。

另外,我建议您看一下log4j,因为您可以根据需要轻松配置它。

关于java - 每天如何将日志文件存储在目录(具有当前日期的目录名称)中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50981488/

相关文章:

python - 当 NTEventLogHandler 抛出异常时如何使用 Python 2.7 写入 windows 系统日志

python - 如何进行干净的日志记录,而不会使代码看起来很糟糕?

Java 套接字握手正常,但没有其他数据。应该怪路由器还是Java(或者我自己)?

java - RESTEASY 如何让@PathParam 匹配一个UUID?

angularjs - 将日期从 Angular 传递到 Web API 2 的正确方法

javascript - 如何将日期字符串转换为没有时区的日期对象

java - 在 Swing java 中打开另一个框架时如何禁用根框架

java - 两个线程通过同步方法访问队列;一个可以严格优先于另一个吗?

jquery - 使用 jQuery 验证结束日期是否大于开始日期

java - 如何使用log4j的同一个记录器将不同的信息写入两个不同的文件?