2010-03-18 93 views
3

声明:我不是一个C++开发人员,我只能做基本的事情。 (我知道指针,只是我的知识是如此生疏,我没有触及C/C++大约20年:))C++简单的条件日志记录

设置:我有一个Outlook插件,用C#/.Net 1.1编写。它使用c++ shim加载。

通常情况下,这工作得很好,我使用我的C#代码nlog进行日志记录。但有时,外挂程序无法加载,i.t.它根本不打托管代码,因此我无法从日志文件中调查问题。

所以,我需要钩住一些基本的日志记录到C++ shim中 - 只需写入一个文件即可。我需要尽可能简化我们的用户启用。其实我不想默认发货。

我在想什么,它会检查一个特定的DLL是否存在(日志记录dll),如果是,使用它。否则,它将不会记录任何内容。这样,当我有一个用户遇到这样的问题时,我可以只发送日志dll,用户将它保存到运行时目录中,然后我将拥有该文件。

我想这必须用某种形式的工厂解决方案来完成,该解决方案返回一个虚拟记录器,或者如果找到了dll,这是一个真正的记录器。

另一种选择是制作一些简单的记录器,并根据指令重新编制或使用它的垫片。这不是可取的方法,因为垫片需要签名,我必须指示用户制作“真实”备份副本,然后在完成时恢复等,而不是只保存和删除dll 。

我很感激任何好的建议如何处理它,连同链接或示例代码如何去之后。

Cheers

回答

2

加载日志记录DLL的接缝就像处理配置问题的复杂方式。为什么不使用注册表。如果你在dll上使用条件加载,你将会使用LoadLibraryGetProceAddress,正如你所说的你不是一个真正的C++编码器,那么为什么要介绍复杂性。你也可以看到n + 1个C++日志库。


我的一些谷歌搜索后发现

+0

是的,log4cplus也不错:http://log4cplus.sourceforge.net/ – neuro 2010-03-18 16:13:07

1

为什么没有注册表项呢?用户打开注册表编辑器,添加一个键并开始记录库。日志代码将一直存在,只是在没有密钥或设置为“不记录”时才会调用。

+0

是的,可以做到的。通常我不想让用户触摸他们的注册表。不过,我需要一个示例代码,或者针对某些日志记录库/框架的建议。 – 2010-03-18 14:31:05

+0

是的,但你可以打开远程日志如果theres和问题以及如何使用dll任何easer为用户。 – rerun 2010-03-18 14:35:21