Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.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
C++ 日志-管理重复的连续日志消息并防止打印重复的日志消息_C++_Logging_Boost_Boost Log - Fatal编程技术网

C++ 日志-管理重复的连续日志消息并防止打印重复的日志消息

C++ 日志-管理重复的连续日志消息并防止打印重复的日志消息,c++,logging,boost,boost-log,C++,Logging,Boost,Boost Log,我不熟悉Boost.Log,并使用它开发了一个日志库,作为Boost.Log之上的包装器。我的问题是找到一种方便的方法来设置连续重复日志消息数的计数器,而不是多次打印同一日志 例如:(ADD_LOG()方法在我的库中,并执行BOOST_LOG_SEV(…) 我希望输出日志文件如下:(sample_0.log) [时间戳][过滤器]您好 [时间戳][筛选器]跳过了2条重复消息 [时间戳][过滤器]一些不同的Hello 我使用的例子是文本文件后端和时间戳,过滤器都可以。我的问题是跳过重复项。可能

我不熟悉Boost.Log,并使用它开发了一个日志库,作为Boost.Log之上的包装器。我的问题是找到一种方便的方法来设置连续重复日志消息数的计数器,而不是多次打印同一日志

例如:(ADD_LOG()方法在我的库中,并执行BOOST_LOG_SEV(…)

我希望输出日志文件如下:(sample_0.log)

[时间戳][过滤器]您好

[时间戳][筛选器]跳过了2条重复消息

[时间戳][过滤器]一些不同的Hello

我使用的例子是
文本文件后端
时间戳
过滤器
都可以。我的问题是跳过重复项。可能需要设置过滤器或其他任何东西


我认为linux中的
syslog
通过一些配置具有此功能。

Boost.Log没有实现这样的日志记录累积,您必须自己实现它。您可以通过实现缓冲最后一条日志记录消息并将其与下一条日志记录消息进行比较来实现这一点。请注意,您不应该缓冲整个记录或格式化字符串,因为它可能会因时间戳、记录计数器和其他您可能使用的频繁更改的属性值而有所不同。

我认为,我应该使用类似缓冲区的模型来保存记录到文件中的最后一条消息。然后检查后面的消息?因为例如,有10条连续的相同消息,记录器应该等待所有消息,然后只打印1行否,所以它不必异步工作。后端将检查它使用的每个日志记录。如果它与前一个匹配,它将递增计数器,并且不输出任何内容。如果不同,那么如果计数器不是零,它将输出一行,说明跳过的重复数,将计数器重置为零,并输出新的日志记录。它还保存消息,以便与将来的记录进行比较。我使用文本文件后端进行日志记录。正如我所读到的,它从
basic\u-formatted\u-sink\u-backend
派生出一个类并实现。但是我想要文本文件后端的所有功能,并且只添加一个缓冲区。是否可以从
text\u file\u backend
继承而不是从
basic\u formatted\u sink\u backend
?并且我的程序在多线程环境中运行。我该怎么关心它呢?发布一个新问题,用一个代码示例展示你在做什么和什么不起作用。
ADD_LOG("Hello");
ADD_LOG("Hello");
ADD_LOG("Hello");
ADD_LOG("Some Different Hello");