【发布时间】:2020-03-26 13:37:52
【问题描述】:
我想知道是否有人可以帮助我解决这个问题。 我当前的代码已设置,为了使用 java.util.logging 中的 Logger,我们将日志写入单个文件,当我们需要访问日志时,我们只需读取该文件。
String filename = name + ".log";
Logger logger = Logger.getLogger(name);
logger.setLevel(Level.ALL);
final FileHandler fileHandler = new FileHandler(filename, true);
final SimpleFormatter formatter = new LogFormatter();
fileHandler.setFormatter(formatter);
logger.addHandler(fileHandler);
然后通过以下方式获取日志的内容
Files.readAllLines(Paths.get(filename));
出现文件大小可能变得太大的问题,因此我想限制它。阅读文档我可以执行以下操作
final FileHandler fileHandler = new FileHandler(filename, 1000000, 3, true);
这将创建最多三个 1MB 的文件,当第三个文件被填满时循环执行,清除第一个文件并从那里再次写入。 这是一个完美的解决方案,但有两个问题我不确定如何解决。
首先,有没有一种简单的方法可以找到所有创建的文件的名称? (更准确地说,有没有一种简单的方法可以做到这一点?我很感激我可以查找 filename.0、filename.1 ... 直到极限)。
其次,我如何找到哪个是“活动”文件。 例子。假设一个周期已经完成并且有三个文件(“file.0”、“file.1”、“file.2”)。如果 Logger 当前正在写入 file.1,我如何确定这一点,因此当我将日志生成为 List 时,日志的顶部是最旧的内容(本例中为 file.2)
感谢您的回复。
【问题讨论】:
-
为什么要从应用程序内部读取日志?这不是为了那个。另外,你应该避免像瘟疫一样的
java.util.logging,看看 Logback/SLF4J/Log4J2 和其他现代记录器。 -
您还可以使用 logrotate 实用程序按大小或日期轮换这些日志,然后阅读它们。
-
嗨@Kayaman,部分原因是我正在开发一个已建立的代码库,还有其他原因,但基本上它归结为我正在寻找对当前代码库的最简单/最快的更改.
-
@IshankGulati 好主意。我决定编写一个比较器并按上次修改时间排序。
标签: java logging java.util.logging