java - 使用具有文件大小限制和文件数量限制的 Logger

标签 java logging java.util.logging

我想知道是否有人可以帮助我解决这个问题。 我当前的代码已设置为使用 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 ... 直到极限)。

其次,如何找到哪个是“Activity ”文件。 例子。假设一个周期已经完成,并且存在三个文件(“file.0”、“file.1”、“file.2”)。如果 Logger 当前正在写入 file.1,我如何确定这一点,因此当我将日志生成为 List 时,日志顶部是最旧的​​内容(本例中为 file.2)

感谢您的回复。

最佳答案

Firstly is there an easy way to find the name of all the files created? (More precisely is there an easy way to do this? I appreciate I can just look for filename.0, filename.1 ... up to the limit).

否,但已提交 RFE 来提供此信息。看: How can I output the name of the current java.util.logging.Logger log file name?

Secondly how do I find which is the "active" file. Example. Lets say that one cycle has already been completed and there are three files ("file.0", "file.1", "file.2"). If the Logger is currently writing to file.1, how do I determine this, so therefore when I produce the log as List the top of the log is the oldest content (file.2 in this example)

根据source code for FileHandler::rotate ,日志文件向下旋转并从末尾删除。因此位置零始终是 Activity 文件。

关于java - 使用具有文件大小限制和文件数量限制的 Logger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60868584/

相关文章:

java - 将 Base 64 字符串保存为图像文件

java - 为什么 java.util.logging.Logger 打印到 stderr?

java - 日志记录异常问题

java.util.logging - 如何强制所有记录器遵守应用程序运行时中给定的格式? (HSQL数据库)

java - Spring Data JPA - 结果中具有多个聚合函数的自定义查询

java - 在 Kotlin 中将映射转换为对象

log4j 记录器和 java.util.logging 的 java 包装器

java - 每次需要时都使用 Logger.getLogger() 或每个类(class)创建一次

java - 无法在hadoop.thanks上运行字数统计

android - 使用 ProGuard 删除 Android 中的 LibGDX 日志