📜  C++ clog(1)

📅  最后修改于: 2023-12-03 14:39:49.524000             🧑  作者: Mango

C++ clog

C++中的clog是一个用于输出日志信息的类。与cout一样,clog也是一个输出流,不同之处在于clog是一个缓冲的流,它的作用是将输出的信息写入缓冲区,直到缓冲区填满或者手动刷新缓冲区时才输出。

用法

使用clog输出日志信息,只需要包含头文件<iostream>,然后使用std::clog来代替std::cout即可。

#include <iostream>

int main() {
    std::clog << "this is a log message" << std::endl;
}

输出:

this is a log message

和cout不同,clog还可以设置日志级别和输出流。C++标准库提供了五个日志级别,分别是:

  • std::ios_base::goodbit,表示成功状态
  • std::ios_base::eofbit,表示已经到达了文件的末尾
  • std::ios_base::failbit,表示读写操作发生了错误
  • std::ios_base::badbit,表示发生了严重的错误
  • std::ios_base::app,表示数据添加到输出流中,而不是覆盖之前的数据

可以使用std::clog.setstate()设置日志级别:

#include <iostream>

int main() {
    std::clog.setstate(std::ios_base::failbit);
    std::clog << "this is a log message" << std::endl;
}

此时输出为空,因为设置了failbit日志级别。

日志格式

C++中的clog还可以设置日志的格式,包括时间戳、文件名和行号等。需要使用std::put_time()函数和__FILE____LINE__预处理宏。

#include <iostream>
#include <iomanip>
#include <ctime>

int main() {
    std::time_t now = std::time(nullptr);
    std::clog << std::put_time(std::localtime(&now), "%F %T") << " "
              << __FILE__ << ":" << __LINE__ << " "
              << "this is a log message" << std::endl;
}

输出:

2021-07-27 13:28:10 main.cpp:10 this is a log message
总结

C++中的clog提供了一个简单的日志输出工具,可以设置日志级别和日志格式,方便程序员调试和排除错误。同时clog也具有良好的线程安全性,可以在多线程环境下使用。