常用日志库与日志技术
大约 2 分钟
常用日志库与日志技术
目录
常用日志库
常用日志库
cpp
- spdlog:一款非常高性能且功能丰富的 C++ 日志库,支持格式化和多线程。
- glog:谷歌开发的 C++ 日志库,性能优秀且易于使用。
- log4cpp:基于 C++ 的日志库,具有良好的性能和灵活性,类似于 Java 的 log4j
java, 这个比较多
- log4j
一些日志库特性
- 高效的字符串格式化。
- 缓冲区和内存管理技术,减少内存分配和释放的开销。
- 异步日志记录,减少 I/O 阻塞。
- 多线程支持,充分利用多核处理器的能力
我觉得比较好的几个日志库特性(根据spdlog)
- 多日志器
- 多sink
- 着色
- 日志链接跳转到指定位置(spdlog好像没有看到有,这个我是在hv的hlog看到的)
ANSI escape code
ANSI 转义码,参考:https://en.wikipedia.org/wiki/ANSI_escape_code
ANSI 转义序列是带内信令的标准,用于控制视频文本终端和终端仿真器上的光标位置、颜色、字体样式和其他选项。某些字节序列(大多数以 ASCII 转义字符和括号字符开头)嵌入到文本中。终端将这些序列解释为命令,而不是逐字显示的文本。
描述
C0 control codes, 控制代码
Fe Escape sequences, 铁转义序列
CSI (控制序列介绍器) 序列
SGR (选择图形呈现形式) 参数
Colors 颜色
3-bit and 4bit
8-bit
24-bit
与颜色支持相关的Unix环境变量
OSC (操作系统命令) 序列
Fs Escape sequences, Fs 转义序列
Fp Escape sequences, Fp 转义序列
nF Escape sequences, nF 转义序列
坑 - Windows开启ANSI转义
有的日志库会自己帮你开,但有的不会(hv/hlog),需要手动开一下。否则不会被转义符不会被转义
// 开启ANSI转义码 (颜色)
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD dwMode = 0;
GetConsoleMode(hStdout, &dwMode);
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
SetConsoleMode(hStdout, dwMode);