发帖问个 C++ logger 设计问题。 现有的 logger 设计成了单例且 crash safe 的,在 logger 初始化时可以设置输出到什么文件、日志级别之类的东西。这些设置项都是全局可访问的,换句话说都是 static 的。然后包装了几个宏来支持方便的日志打印功能,代码库中打印日志都是通过这些宏实现的。 我的代码库提供的接口都围绕这一个类,现在希望可以将 logger 绑定到这个类的实例上,由某个具体实例唤起的代码执行流共享同一个 logger, 不同的实例使用不同的 logger. 同时要尽量少的修改已有代码中打印日志的地方。 目前我能想到的两个方法分别是: 1 、将原先 static 的变量改成 non-static 的,代码库中所有的类可能使用日志打印的类都加一个成员变量持有 logger 实例,所以普通函数和类的静态成员函数都加一个参数支持将 logger 传进来; 2 、用一个全局的 hash map 维护 logger 实例到某个类的实例的映射,然后将原先 static 的变量都改成 thread_local static 的,每个线程在最开始将自己的 thread_local 变量设置好,然后在执行正常流程; 但是第一种方法改造成本较高,第二种方法感觉不怎么优雅,所以想问问各位大佬还有什么别的办法。 希望各位大佬不吝指教。
1
java253738191 2022-07-25 17:56:01 +08:00
类模版比较适合你
|
2
byaiu 2022-07-25 18:25:46 +08:00
crash safe 是什么意思
|
3
daemonLei OP @java253738191 能具体说说怎么用类模板解决这个问题吗?
|