下面的代码创建一个名称为当前日期的目录并将日志文件存储在该目录中,但是第二天日志文件将数据存储在同一目录中...我想每天创建一个与当前日期同名并存储新目录里面有新的日志文件。
私有静态日期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/