C++11 很容易实现线程安全的多参数log语法

本文介绍了一个使用C++11特性设计的日志系统,包括括号操作符重载、chrono和iomanip库的时间戳格式化、lock_guard确保线程安全、variadic template支持任意参数类型和数量,以及列表初始化实现日志顺序打印。

就像

myLogger("who are you?", "I'm ZRH", "I'm in thread:", std::this_thread::get_id());
myLogger(1, "+", 2u, "=", "3");

多个thread输出形如:

2016-04-16 10:54:54 who are you? I'm ZRH I'm in thread: 6736
2016-04-16 10:54:54 1 + 2 = 3
2016-04-16 10:54:54 who are you? I'm ZRH I'm in thread: 13528
2016-04-16 10:54:54 1 + 2 = 3
2016-04-16 10:54:54 who are you? I'm ZRH I'm in thread: 3036
2016-04-16 10:54:54 1 + 2 = 3

用到了

- 括号 操作符重载

- C++11 chrono, iomanip 获取和格式化输出时间戳;

- C++11 lock_guard, 保证一条log记录是线程安全的;

- C++11 variadic template, 这样就可以做到随意的参数个数和参数类型(当然,要保证参数的可打印,比如有 << 操作符实现);

- C++11 list initialization, braced-init-list, 列表初始化的形式顺序打印log,这比递归实现好多了;

转载于:https://www.cnblogs.com/rhzhang/p/5397913.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值