现在我有:
- 使用通用静态库和动态 DLL编写的多线程Windows 服务;
C++
- 每个线程执行不同的任务并产生不同的错误(数据库错误、函数调用错误等)。每个线程将进一步充当一个
logger client
(并将所有消息发送到一个logger server
); - 一个单独的线程,它还没有主体,但它将充当
logger server
处理来自.logger clients
我需要一个很好的建议,说明我应该如何将以下想法实施到一个可行的解决方案中。这个想法是为我的多线程服务器添加一个服务器-客户端日志架构,具有以下要求(尽管某些部分我需要自己实现,请仅考虑 and 的基本思想logger client
)logger server
:
应该有很多
log clients
(正如我已经提到的,这log client
只是一个现有的工作线程),每个都应该注册一个具有唯一名称或/和 ID 的实体以及以下行为:如果
logger server
启动并且现在正在工作,这log client
将开始发送日志消息,否则(
logger server
关闭),log client
无休止地尝试log server
使用一个小的超时来注册自己。
应该有一个
logger server
, 具有以下行为:log server
使用其唯一名称或/ID注册所有人log clients
,并无休止地检查是否出现要注册的新日志客户端日志服务器处理来自不同的所有消息
log clients
并写入数据库、文件等。应该有机会建立与外部应用程序的连接
log server
(例如,MySuperThreadViewerProgram以监视所有线程活动/错误/等)。在连接时,log server
应将外部应用程序视为一个附加应用程序log client
。这是最重要的要求。
总结起来,要实现三个架构部分:
- 服务器-客户端记录器架构;
log clients
和之间的消息队列设施log server
。并log server
定期检查是否有可用的日志客户端可以注册;- 与外部应用程序之间的进程间通信
log server
,后者充当新的log client
.
请注意,我认为 a
logger server
是一种日志消息路由器。
所以,主要问题是:
是否有任何解决方案(软件框架)具有上述所有功能(最好是),或者我应该为不同的部分使用不同的库?
如果答案是:“没有这样的解决方案”,您能否回顾一下我所做的选择:
- 对于#1:使用Pantheios记录器框架;
- 对于#2:使用任何类型的具有服务器-客户端架构和消息队列支持的注册-订阅库(更新:ipc 库);
- 对于 #3:使用Boost.Interprocess - 使用 SharedMemory。
更新:
#2 的一个很好的例子是这个 ipc library。logger client - logger server
可能是我描述关系有点不正确,但我真正的意思是类似于方法,在ipc库中完全描述和实现:当一个实体(线程)订阅另一个实体(线程)以接收其消息(或“发布-订阅”模型)。我想使用一种这种技术来实现我的日志架构。但以什么方式?
更新2:
操作系统是 Windows。是的,我知道,在 Linux 下有很多有用的工具和框架(D-Bus、Syslog)。可能你们中的一些人可以提供一个有用的跨平台库链接,这可能有用吗?也许在 Windows 下的 D-Bus上有一个记录器框架?
任何意见都受到高度赞赏。
非常感谢!