Java使用常量标头旋转日志

时间:2016-03-08 16:47:57

标签: java csv logging filehandler log-rotation

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

由于统计数据将每秒收集一次,我想我需要某种日志文件轮换大小限制,文件处理程序提供,但我仍然想念的是什么,对我来说重要的是具有恒定头的能力所有日志文件。

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

有谁知道如何做到这一点?我无法找到适合我的lib或其他类似的问题。

另外,如果你知道其他一些可以实现这个的lib,我愿意放弃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";
    }
}

这是工人代码:

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.

0 个答案:

没有答案