我的应用程序有一个简单的记录器。这是一个(简化的)界面:
class ILogger
{
public:
virtual void LogUnsafe(const LogPriority& priority, const boost::format& message) = 0;
virtual void Log(const LogPriority& priority, const boost::format& message)
{
if (priority <= logPriority_)
{
std::unique_lock<std::mutex> lock(loggerMutex_);
LogUnsafe(priority, message);
}
}
void Log(const LogPriority& priority, const std::string& message)
{
Log(priority, boost::format(message));
}
template<typename T, typename... Args>
void Log(const LogPriority& priority, boost::format &format, const T &v, Args... args)
{
Log(priority, boost::format(format) % v, args ...);
}
template<typename... Args>
void Log(const LogPriority& priority, const char *format, Args... args)
{
boost::format fmt(format);
Log(priority, fmt, args ...);
}
};
现在我需要(为了便于错误检测)在每条日志消息中包含行和功能信息(使用__LINE__
and __FUNCTION__
)。合理地它应该作为函数参数传递。而且,像往常一样,我不想在每次编写日志消息时都输入所有这些宏。所以我在这里遇到了麻烦。我怎样才能优雅地将它们传递给日志功能,而无需在每条日志消息中明确写入?
提前致谢。