
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__和__FUNCTION__).合理地它应该作为函数参数传递.而且,像往常一样,我不希望每次写日志消息时都键入所有这些宏.所以我在这里遇到了麻烦.如何在没有在每条日志消息中明确写入它的情况下优雅地将它们传递给日志记录功能?
提前致谢.
解决方法 我发现执行此 *** 作的“最好”方法是使用通过宏创建的日志对象,如上所述.关于它的“好”之处在于它封装了站点上可用的所有信息,因此可以将其传递给不同的记录器.例如,您可以拥有一系列“记录器”,通过网络发送它,将其发送到磁盘和系统监视器(如windows事件日志).此外,您还可以使用生产者 – 消费者日志记录线程来提高性能.class LogEntry{ LogEntry(const boost::format& traceMsg,const unsigned int lineNumber,const std::string& file){ //set members } std::string print(){ // Do print logic... } // Getters... Allow the logger instance build its own log from the info.} 然后使用宏:
#define LOG( format ) sendTologQueue( LogEntry( format,__liNE__,std::string(__file__) ) );总结
以上是内存溢出为你收集整理的C:记录器设计,行/函数信息作为函数参数全部内容,希望文章能够帮你解决C:记录器设计,行/函数信息作为函数参数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)