Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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++异步轻量级记录器。大致实现如下所示: ILogger log(fileName, LoggingLevel::WARN) log << "Hello" << "This is sample warn logging"; ILogger日志(文件名,日志级别::警告) log_C++_Logging_Asynchronous_Mfc - Fatal编程技术网

设计一个C++;带操作员的记录器'<<'; 我设计了C++异步轻量级记录器。大致实现如下所示: ILogger log(fileName, LoggingLevel::WARN) log << "Hello" << "This is sample warn logging"; ILogger日志(文件名,日志级别::警告) log

设计一个C++;带操作员的记录器'<<'; 我设计了C++异步轻量级记录器。大致实现如下所示: ILogger log(fileName, LoggingLevel::WARN) log << "Hello" << "This is sample warn logging"; ILogger日志(文件名,日志级别::警告) log,c++,logging,asynchronous,mfc,C++,Logging,Asynchronous,Mfc,您可以为每个日志操作创建一个实例,而不是只有一个logger对象实例。然后在其析构函数中“刷新”队列输出 应该写入刷新输出的文件流(或队列,或任何您想要的)可以是一个静态成员,初始化一次,并由每个实例使用。为什么不让日志记录器接受std::endl作为标记来指示应该写入日志行: log << "Hello" << "This is sample warn logging" << std::endl; log您可以创建一个助手朋友类 class LogStre

您可以为每个日志操作创建一个实例,而不是只有一个logger对象实例。然后在其析构函数中“刷新”队列输出


应该写入刷新输出的文件流(或队列,或任何您想要的)可以是一个静态成员,初始化一次,并由每个实例使用。

为什么不让日志记录器接受
std::endl
作为标记来指示应该写入日志行:

log << "Hello" << "This is sample warn logging" << std::endl;

log您可以创建一个助手朋友类

class LogStream {
    ILogger&            log_;
    std::ostringstream  logS_;
public:
    LogStream(ILogger& log) : log_(log) {
    }
    ~LogStream() {
        log_.queue.add(logS_.str());
    }
    template<typename T>
    LogStream& operator<<(const T& val) {
        logS_ << val;
        return *this;
    }
};
那么日志记录语句

log.getStream() << "Hello" << "This is sample warn logging";

log.getStream()可能与感谢重复。但我不想这么做。如果用户不小心漏掉了endl怎么办?他认为消息正在被记录,而消息不会被记录t@MohanKumar用户忘记结束行或刷新流的问题仍然存在于普通的
std::cout
。是的,有些案例在这里结束,有人想知道为什么他们没有得到输出。你能更详细地解释一下吗。我明白,但要将此作为可接受的答案,不需要更多的澄清
LogStream ILogger::getStream() {
    return LogStream(*this);
}
log.getStream() << "Hello" << "This is sample warn logging";