现在我有:
- a multithreaded windows service written in
C++
which use common static libraries as well as dynamic DLLs; - each thread performs different tasks and produces different errors (DB errors, function invocation errors, etc.). Each thread further will act as a
logger client
(and will send all messages to alogger server
); - a separate thread which has no body yet, but which will act as a
logger server
for handling all log messages from thelogger clients
.
我需要一个良好的建议,说明我应该如何将以下想法落实到一个工作解决方案中。 想法是“ 强” 将服务器客户记录结构添加到我的多行服务器 < / 强”, 并符合以下要求( 虽然有些部分我需要自己执行, 但请只考虑 < code> logger 客户端 code > 和 < code> logger 服务器 code > 的基本想法 ):
应该有许多
log 客户
(如我已提到,log 客户
只是一个存在的工作线索),每个客户都应 < strong> 注册一个实体,名称独特或/和ID 并有以下行为:如果
logger server
服务器 正在运行, 这个log 客户端
开始发送日志信息,否则(
log server
is down),log client
将试图使用小的超时,无休止地用log server
注册为server
。
应该有一个
logger server
服务器 , 其行为如下:log 服务器
登记了所有log 客户
及其独有名称或/ ID 和无尽检查,如果新日志客户正在注册的话log 服务器 < strong> handles all message from different
客户
客户 并写到 DB、 文件等 。在连接时, < code> 服务器 < code> server service 应该有 < strong> 机会从外部应用程序 strong > (例如, < strong> MySuperThreadViewerProgram 监测所有线索活动/errors/etc)。 在连接时, < code> 服务器 应该考虑外部应用程序,将其作为一个又一个
客户端
. > 。 < strong > 这是最重要的要求。 parg >
总而言之,有3个建筑部分需要实施 < 强 > /强 > :
- Server-client logger architecture;
- Message queue facility between
log clients
andlog server
. Andlog server
periodically checks if there any available log clients to be registered; - Inter-process communication between
log server
and external application, where the latter acts as a newlog client
.
请注意, 我将 < code> logger 服务器 视为一种 < strong > 消息路由器 strong > 。
因此,主要问题是:
是否有任何解决办法(软件框架)具有上述所有特征(最好有`坚固 ',最好有 强'),或我应不同部分使用不同的图书馆?
如果答案是:"没有这样的解决方案" 你能回顾一下我所做的选择吗:
- For #1: using Pantheios logger framework;
- For #2: using any kind of register-subscribe library with server-client architecture and message-queue support (update: ipc library) ;
- For #3: using Boost.Interprocess - using SharedMemory.
<强 > UPATE: 强 >
The good example of #2 is this ipc library. And may be I was a bit incorrect describing logger client - logger server
relations, but what I really mean is similar to approach, fully described and implemented in ipc library: when one entity (thread) subscribes to another to receive its messages (or "publish-subscribe" model).
And I want to use a kind of this technique to implement my logging architecture. But in what way?
<强> UPATE2: 强>
操作系统是 Windows 。 是的, 我知道 Linux 下有一堆有用的工具和框架( D- Bus, Syslog ) 。 你们中可能有些人能为跨平台库提供有用的链接 。 也许在 Windows 下有一个 < strong > > lugger 框架, 而不是 D- Bus < / strong >?
任何评论均不胜感谢。
非常感谢!