Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有常数头的Java旋转日志_Java_Csv_Logging_Filehandler_Log Rotation - Fatal编程技术网

具有常数头的Java旋转日志

具有常数头的Java旋转日志,java,csv,logging,filehandler,log-rotation,Java,Csv,Logging,Filehandler,Log Rotation,我制作了一些系统,现在我想在它运行时跟踪一些关于它的统计数据。我决定用TSV表格写下这些统计数据。在寻找现有最好的lib时(如果可以的话,我希望避免自己实现它),我发现lib几乎正是我想要的 由于统计数据将每秒收集一次,我想我需要某种日志文件大小限制循环,这是文件处理程序提供的,但我仍然错过了,而且对我来说重要的是在所有日志文件中具有恒定头的能力 所以我希望所有日志文件中的自定义第一行都进行旋转(包含TSV格式列的含义),其余的行都是真实的统计数字 有人知道如何做到这一点吗?我找不到适合我的li

我制作了一些系统,现在我想在它运行时跟踪一些关于它的统计数据。我决定用TSV表格写下这些统计数据。在寻找现有最好的lib时(如果可以的话,我希望避免自己实现它),我发现lib几乎正是我想要的

由于统计数据将每秒收集一次,我想我需要某种日志文件大小限制循环,这是文件处理程序提供的,但我仍然错过了,而且对我来说重要的是在所有日志文件中具有恒定头的能力

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

有人知道如何做到这一点吗?我找不到适合我的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."));

您必须在文件处理程序上创建and。该方法用于写入标题,并在每次打开或旋转FileHandler时调用。在这种情况下,该方法将用于为每个给定的日志记录生成一行数据。因此,您需要每隔一秒钟生成(或重用)一条日志记录,并将其发送给FileHandler。

可能是个人喜好,但我不会找到一个库来做这样的事情。从您对需求的解释来看,这种类型的应用程序似乎足够简单,可以在合理的时间内编写。也许您是对的,如果没有优雅的答案,我就这么做。但如果可能的话,最好还是重用完成的代码:)谢谢你的帮助!我给问题加上了最后的答案;注意,没有必要重复使用相同的日志记录
[/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.