使用 c++ 日志库:loguru
项目主页:https://github.com/emilk/loguru 文档:https://emilk.github.io/loguru/index.html
注意
⚠️:不提供日志滚动。也不提供日志大小限制。
1. 初始化日志配置
使用函数 loguru::init(argc, argv);
进行日志初始化,目前这个函数只接收 -v
参数。
-v
参数后面可以跟的选项如下
-
-v n
Set loguru::g_stderr_verbosity level. Examples: -
-v 3
Show verbosity level 3 and lower. -
-v 0
Only show INFO, WARNING, ERROR, FATAL (default). -
-v INFO
Only show INFO, WARNING, ERROR, FATAL (default). -
-v WARNING
Only show WARNING, ERROR, FATAL. -
-v ERROR
Only show ERROR, FATAL. -
-v FATAL
Only show FATAL. -
-v OFF
Turn 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);
});