gpt4 book ai didi

带有常量 header 的 Java 旋转日志

转载 作者:行者123 更新时间:2023-11-30 03:01:17 31 4
gpt4 key购买 nike

我制作了一些系统,现在我想在它运行时跟踪它的一些统计数据。我决定使用 TSV 形式来记下这些统计数据。在寻找现有的最佳库时(如果可以的话,我想避免自己实现它),我发现 FileHandler lib 几乎正是我想要的。

由于每秒都会收集统计信息,我想我需要某种大小限制的日志文件轮换,这是文件处理程序提供的,但我仍然怀念并且对我来说重要的是能够在其中具有恒定的 header 所有日志文件。

所以我想在所有旋转的日志文件中自定义第一行(包含 TSV 格式的列的含义),其余行将是真实的统计数字。

有人知道如何实现这一目标吗?我无法找到适合我的库或其他类似的问题。

此外,如果您知道其他一些可以完成此任务的库,我愿意放弃 FileHandler 而转而使用该库。

提前致谢!

编辑:因此,根据@jmehrens 提供的答案,我编写了以下代码,它的工作原理就像魅力一样!这是一个自定义格式化程序类:

class CustomFormatter extends Formatter {
@Override
public String format(LogRecord record) {
return record.getMessage() + "\n";
}
@Override
public String getHead(Handler h) {
return "header\n";
}
}

这是 worker 代码:

String path = "/tmp/temp2";
FileHandler fileHandler = new FileHandler(path, 300, 5);
fileHandler.setFormatter(new CustomFormatter());

Logger logger = Logger.getLogger("sam.logging");
logger.addHandler(fileHandler);

for(int i = 0; i < 10000; i++)
logger.log(new LogRecord(Level.INFO, i+" aaaaaaaaaaaaaa."));

这里是示例输出:

[/tmp] -> cat temp2.3
header
9957 aaaaaaaaaaaaaa.
9958 aaaaaaaaaaaaaa.
9959 aaaaaaaaaaaaaa.
9960 aaaaaaaaaaaaaa.


[/tmp] -> cat temp2.1
header
9985 aaaaaaaaaaaaaa.
9986 aaaaaaaaaaaaaa.
9987 aaaaaaaaaaaaaa.
9988 aaaaaaaaaaaaaa.
9989 aaaaaaaaaaaaaa.

最佳答案

您必须创建一个 custom java.util.Formatterinstall it在你的文件处理程序上。 Formatter.getHead方法用于写入 header ,并在每次打开或旋转 FileHandler 时调用。 Formatter.format在这种情况下,将使用方法为每个给定的 LogRecord 生成一行数据。因此,您需要每秒生成(或重用)一个 LogRecord 和 publish它到 FileHandler。

关于带有常量 header 的 Java 旋转日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35873152/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com