使用 c++ 日志库:loguru
项目主页:https://github.com/emilk/loguru 文档:https://emilk.github.io/loguru/index.html
注意⚠️:不提供日志滚动。也不提供日志大小限制。
1. 初始化日志配置
使用函数 loguru::init(argc, argv); 进行日志初始化,目前这个函数只接收 -v 参数。
-v 参数后面可以跟的选项如下
-
-v nSet loguru::g_stderr_verbosity level. Examples: -
-v 3Show verbosity level 3 and lower. -
-v 0Only show INFO, WARNING, ERROR, FATAL (default). -
-v INFOOnly show INFO, WARNING, ERROR, FATAL (default). -
-v WARNINGOnly show WARNING, ERROR, FATAL. -
-v ERROROnly show ERROR, FATAL. -
-v FATALOnly show FATAL. -
-v OFFTurn off logging to stderr.
或者使用 loguru::g_stderr_verbosity = loguru::Verbosity_OFF; 关掉 stderr 的输出。
2. 增加日志文件
loguru::add_file(logfile.data(), loguru::Append, loguru::Verbosity_MAX);
目前只支持2种模式:
-
loguru::Append每次进程启动的时候都向日志文件中添加日志,其实就是open("xx.log", "a") -
loguru::Truncate每次都清空上一次的日志文件,其实就是open("xx.log", "w")
3. 写日志
LOG_F(INFO, "I'm hungry for some %.3f!", 3.14159);
官方文档代码
#include <loguru.hpp>
…
// Optional, but useful to time-stamp the start of the log.
// Will also detect verbosity level on command line as -v.
loguru::init(argc, argv);
// Put every log message in "everything.log":
loguru::add_file("everything.log", loguru::Append, loguru::Verbosity_MAX);
// Only log INFO, WARNING, ERROR and FATAL to "latest_readable.log":
loguru::add_file("latest_readable.log", loguru::Truncate, loguru::Verbosity_INFO);
// Only show most relevant things on stderr:
loguru::g_stderr_verbosity = 1;
LOG_SCOPE_F(INFO, "Will indent all log messages within this scope.");
LOG_F(INFO, "I'm hungry for some %.3f!", 3.14159);
LOG_F(2, "Will only show if verbosity is 2 or higher");
VLOG_F(get_log_level(), "Use vlog for dynamic log level (integer in the range 0-9, inclusive)");
LOG_IF_F(ERROR, badness, "Will only show if badness happens");
auto fp = fopen(filename, "r");
CHECK_F(fp != nullptr, "Failed to open file '%s'", filename);
CHECK_GT_F(length, 0); // Will print the value of `length` on failure.
CHECK_EQ_F(a, b, "You can also supply a custom message, like to print something: %d", a + b);
// Each function also comes with a version prefixed with D for Debug:
DCHECK_F(expensive_check(x)); // Only checked #if !NDEBUG
DLOG_F(INFO, "Only written in debug-builds");
// Turn off writing to stderr:
loguru::g_stderr_verbosity = loguru::Verbosity_OFF;
// Turn off writing err/warn in red:
loguru::g_colorlogtostderr = false;
// Throw exceptions instead of aborting on CHECK fails:
loguru::set_fatal_handler([](const loguru::Message& message){
throw std::runtime_error(std::string(message.prefix) + message.message);
});