日志库EasyLogging++学习系列(4)—— 格式说明符
来源:互联网 发布:条形码进销存软件 编辑:程序博客网 时间:2024/06/12 20:51
在上一篇文章中,主要记录了如何使用 Easylogging++ 的配置功能,虽然已经用了很大的篇幅尽可能详细地加以记录,不过相信有些细心的小伙伴可能已经发现遗漏了些什么,请看下面两句摘自 my_log.conf 配置文件的语句:
- FORMAT = "[%level | %datetime] | %msg"
- FILENAME = "log\\log_%datetime{%Y%M%d}.log"
对于等号右边的值,比如 %level、%datetime{%Y%M%d} 这些特殊符号的意义和用法在上一文中并没有提及,所以就在这里对此进行一个补充说明。而这些特殊的符号,就是 Easylogging++ 用于控制日志输出的格式说明符。
输出格式说明符
和C语言的格式化输出一样,Easylogging++ 也可以格式化输出日志,下面的表格列举了GitHub上给出的 Easylogging++ 支持的输出格式说明符:
Specifier Replaced By
%logger
Logger ID%thread
Thread ID - Uses std::thread if available, otherwise GetCurrentThreadId() on windows%level
Severity level (Info, Debug, Error, Warning, Fatal, Verbose, Trace)%levshort
Severity level (Short version i.e, I for Info and respectively D, E, W, F, V, T)%vlevel
Verbosity level (Applicable to verbose logging)%datetime
Date and/or time - Pattern is customizable - see Date/Time Format Specifiers below%user
User currently running application%host
Computer name application is running on%file
File name of source file (Full path)%fbase
File name of source file (Only base name)%line
Source line number%func
Logging function%loc
Source filename and line number of logging (separated by colon)%msg
Actual log message%
Escape character (e.g, %%level will write %level)另外,Easylogging++ 还提供了让我们自定义格式说明符的能力。下面的代码演示了如何自定义 %ip_addr 这个格式说明符:
- #include "easylogging++.h"
- INITIALIZE_EASYLOGGINGPP
- const char* getIp(void)
- {
- return "192.168.1.1";
- }
- int main(void)
- {
- /// 自定义格式说明符 %ip_addr
- el::Helpers::installCustomFormatSpecifier(el::CustomFormatSpecifier("%ip_addr", getIp));
- /// 利用自定义格式说明符 %ip_addr 进行日志输出
- el::Loggers::reconfigureAllLoggers(el::ConfigurationType::Format, "%datetime %level %ip_addr : %msg");
- LOG(INFO) << "This is request from client";
- system("pause");
- return 0;
- }
时间格式说明符
在输出格式说明符中有一个专门用于格式化输出时间的说明符:%datetime ,而 Easylogging++ 已经默认为 %datetime 设置了一个时间输出格式。然而,我们可以利用时间格式说明符重新自定义时间的输出格式,下面的表格列举了GitHub上给出的 Easylogging++ 支持的时间格式说明符:
Specifier Replaced By
%d
Day of month (zero-padded)%a
Day of the week - short (Mon, Tue, Wed, Thu, Fri, Sat, Sun)%A
Day of the week - long (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)%M
Month (zero-padded)%b
Month - short (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)%B
Month - Long (January, February, March, April, May, June, July, August, September, October, November, December)%y
Year - Two digit (13, 14 etc)%Y
Year - Four digit (2013, 2014 etc)%h
Hour (12-hour format)%H
Hour (24-hour format)%m
Minute (zero-padded)%s
Second (zero-padded)%g
Milliseconds (width is configured by ConfigurationType::MillisecondsWidth)%F
AM/PM designation%
Escape character需要注意的是,在 Easylogging++ 中,时间的输出格式最大仅支持 30 个字符。注意事项
在刚开始使用 Easylogging++ 作为我的日志库的时候,我曾经写过下面这样一个配置文件:
- * GLOBAL:
- FORMAT = "[%level | %datetime] | %msg"
- ENABLED = true
- TO_FILE = true
- TO_STANDARD_OUTPUT = true
- MILLISECONDS_WIDTH = 3
- PERFORMANCE_TRACKING = false
- MAX_LOG_FILE_SIZE = 2097152 ##
- LOG_FLUSH_THRESHOLD = 0
- * INFO:
- FILENAME = "log\\server_%level_%datetime{%Y%M%d%H}.log"
- * DEBUG:
- ENABLED = false
- * WARNING:
- FILENAME = "log\\server_%level_%datetime{%Y%M%d%H}.log"
- * TRACE:
- FILENAME = "log\\server_%level_%datetime{%Y%M%d%H}.log"
- * VERBOSE:
- ENABLED = false
- * ERROR:
- FILENAME = "log\\server_%level_%datetime{%Y%M%d%H}.log"
- * FATAL:
- ENABLED = false
从上面给出的反例中可以看出,对于输出格式说明符,只适用于配置项 FORMAT;而时间格式说明符,不仅适用于配置项 FORMAT,同样还适用于配置项 FILENAME。这一点,通过查看 Easylogging++ 的源码也可以得到证实。当然,如果我们想要让配置项 FILENAME 也能够使用输出格式说明符,可以通过修改源码去实现。建议有兴趣的小伙伴参考一下函数 updateFormatSpec() ,然后在函数 resolveFilename() 中修改即可。
- 日志库EasyLogging++学习系列(4)—— 格式说明符
- 日志库EasyLogging++学习系列(4)—— 格式说明符
- 日志库EasyLogging++学习系列(11)—— 共享日志库
- 日志库EasyLogging++学习系列(11)—— 共享日志库
- 日志库EasyLogging++学习系列(2)—— 日志级别
- 日志库EasyLogging++学习系列(6)—— 日志记录器
- 日志库EasyLogging++学习系列(8)—— Verbose日志详解
- 日志库EasyLogging++学习系列(10)—— 日志文件滚动
- 日志库EasyLogging++学习系列(2)—— 日志级别
- 日志库EasyLogging++学习系列(6)—— 日志记录器
- 日志库EasyLogging++学习系列(8)—— Verbose日志详解
- 日志库EasyLogging++学习系列(10)—— 日志文件滚动
- 日志库EasyLogging++学习系列(1)—— 简要介绍
- 日志库EasyLogging++学习系列(3)—— 配置功能
- 日志库EasyLogging++学习系列(5)—— 辅助配置功能
- 日志库EasyLogging++学习系列(7)—— 记录方式详解
- 日志库EasyLogging++学习系列(9)—— 性能跟踪功能
- 日志库EasyLogging++学习系列(1)—— 简要介绍
- SMTP邮件发送不成功(所有文件留在Queue)
- day04
- 工具类之TimeUtils
- 实现类似于购物车控制商品数量的按钮
- jquery全解(2)
- 日志库EasyLogging++学习系列(4)—— 格式说明符
- iOS中如何用纯代码绘制比较复杂图表UI
- java与C/C++的不同之处之一(小发现)
- day05
- IO中读取文件并将数字相加
- socket select
- typeid的使用方法
- VirtualBox 共享文件夹设置 及 开机自动挂载
- jQuery高级事件---模拟操作和命名空间