2、spdlog线程安全函数

本文介绍了在多线程环境中如何确保日志系统的线程安全性。非线程安全的logger函数,如set_error_handler和logger::sinks(),不应在多线程中用于写操作。为创建线程安全的logger,应使用*_mt工厂函数,例如spdlog::basic_logger_mt。同时,线程安全的sink可使用*_mt结尾的函数,如daily_file_sink_mt,而非线程安全的则采用*_st。理解这些细节对于构建可靠的多线程日志系统至关重要。

1、 非线程安全函数

非线程安全方法
多个线程调用同一个logger对象时,不应该调用以下方法:

set_error_handler(log_err_handler);
logger::sinks() - 返回一个非线程安全的vector,所以不要在多线程中执行写操作(logger->sinks().push_back(new_sink);

Loggers
创建线程安全的logger, 需要使用**_mt** 结尾的工厂函数,如

auto logger = spdlog::basic_logger_mt(...);

创建单线程的logger,使用**_st** 结尾的工厂函数,如:

auto logger = spdlog::basic_logger_st(...);

Sinks:
线程安全:以**_mt** 结尾的sinks函数,如:

daily_file_sink_mt(...);

非线程安全: 以**_st** 结尾的sinks函数, 如:

daily_file_sink_st(...);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值