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

8066

被折叠的 条评论
为什么被折叠?



