配置日志
有几个 flag 会影响 log 的输出行为。
使用 Flag 配置日志输出
以下 flag 是最常用的:
logtostderr (bool,默认=false)
: 将日志消息输出到 stderr 而不是日志文件。
stderr_threshold
- 类型:
int,默认 = 2(即ERROR)。 将大于或等于该级别的日志消息同时复制到stderr,同时保留在日志文件中。日志级别INFO、WARNING、ERROR和FATAL的数值分别为 0、1、2 和 3。 - 支持动态更新。
min_log_level
- 类型:
int,默认 = 0(即INFO)。 - 输出大于或等于该级别的日志消息。日志级别
INFO、WARNING、ERROR和FATAL的数值分别为 0、1、2 和 3。 - 支持动态更新。
log_with_prefix
- 类型:
bool,默认 = true。 - 在每条日志行开头添加日志前缀。
- 支持动态更新。
verbosity
- 类型:
int,默认 = 0(即不输出详细日志)。 - 显示所有
VKLOG(m)消息,其中m <= 该值。可被vlog_module覆盖。 - 支持动态更新。
vlog_module
- 类型:
string,默认 = ""(即不输出详细日志)。 - 按模块设置日志详细级别。参数为以逗号分隔的
<module name>=<log level>列表。<module name>是匹配文件名基名的 glob 模式(即去掉.cc/.h/.-inl.h后的名称)。 不带斜杠的模式只匹配文件名部分;否则匹配相对于工作区根目录的完整文件路径(仍去掉.cc/.h/.-inl.h)。 glob 模式中的?和*分别匹配任意单个字符和任意字符序列(包括斜杠)。<log level>会覆盖--verbosity的设置。
backtrace_log_at
- 类型:
string,默认 = ""(即不输出堆栈跟踪日志)。 - 当日志触发在
file:linenum时打印堆栈跟踪。 - 支持动态更新。
log_type
初始化日志时使用的参数。
-
类型:
int,默认 = 0。 -
日志类型对应
LogSinkType: -
0:控制台日志
-
1:每日日志文件
-
2:每小时日志文件
-
3:循环日志文件
-
不支持动态更新。
程序中修改 Flag
也可以在程序中通过更新全局变量 FLAGS_* 来修改 flag 值。大多数设置在更新 FLAGS_* 后立即生效,
目标文件相关的 flag 除外。
!!! 示例:"在运行时设置日志级别"
KLOG(INFO) << "file";
// 大多数 flag 在更新值后立即生效。
turbo::set_flag(&FLAGS_min_log_level,static_cast<int>(turbo::LogSeverity::kWarning));
KLOG(INFO) << "should not display";
turbo::set_flag(&FLAGS_min_log_level,static_cast<int>(turbo::LogSeverity::kInfo));
KLOG(INFO) << "should display";