为什么Boost日志记录器操作不是const?

时间:2013-11-24 07:50:50

标签: c++ boost boost-log

我正在尝试使用严重性通道记录器,但我遇到的问题是BOOST_LOG_SEV不是const方法 - 我正在考虑因为open_record()和push_record()

这基本上会迫使我让我的类中的所有方法都不是const,因为他们想写出他们的记录器。我真的不能这么做 - 所以我目前只限于全球记录器。

在我当前的实现中,每个类都有一个记录器,其中类名作为通道(在其构造函数中初始化),并且它在BOOST_LOG_SEV(this->logger, level)

的任何点发出日志消息

我很想听听非常规背后的原因,如果我的设计不适合Boost :: Log。

1 个答案:

答案 0 :(得分:4)

记录器不能是const,因为它们会改变自己的状态。如果记录器是线程安全的并且不改变对象的逻辑状态,那么它们就是你应该使用mutable关键字的完美示例。

使loggers可变类成员mutable SomeLoggerType my_logger;。然后你就可以在const成员中修改它了。这正是mutable的意思。

至于你对可变性是一种糟糕的代码气味的评论,可变的是一种逃避舱口,正是出于这种目的。当你实际上没有修改对象的逻辑状态时(和c ++ 11内部同步),Mutable很好。可变用法的另一个非常好的例子是缓存。