跳至主要內容

常用日志库与日志技术

LincZero大约 2 分钟

常用日志库与日志技术

目录

常用日志库

常用日志库

  • cpp

    • spdlog:一款非常高性能且功能丰富的 C++ 日志库,支持格式化和多线程。
    1. glog:谷歌开发的 C++ 日志库,性能优秀且易于使用。
    2. 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);