【问题标题】:c++ simple conditional loggingC++ 简单的条件日志记录
【发布时间】:2011-01-29 01:22:37
【问题描述】:

免责声明:我不是 C++ 开发人员,我只能做一些基本的事情。 (我懂指点,只是我的知识太生疏了,20年没碰c/c++了:))

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

通常,这很好用,我在我的 c# 代码中使用 nlog 来记录日志。但有时,插件无法加载,i.t.它根本没有命中托管代码,让我能够从日志文件中调查问题。

所以,我需要将一些基本的日志记录挂接到 c++ shim 中 - 只需写入文件即可。我需要让我们的用户启用它尽可能简单。其实我宁愿不默认发货。

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

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

另一种选择是制作一些简单的记录器,并根据指令使用或不使用它来重建 shim。这不是理想的方法,因为需要对 shim 进行签名,并且我必须指示用户制作“真实”的备份副本,然后在完成后恢复等,而不仅仅是保存和删除 dll .

如果有任何好的建议如何处理它,以及如何处理它的链接或示例代码,我将不胜感激。

干杯

【问题讨论】:

    标签: c++ file logging conditional


    【解决方案1】:

    日志 dll 接缝的加载就像处理配置问题的一种复杂方式。为什么不使用注册表。如果您在 dll 上使用条件加载,您将使用 LoadLibraryGetProceAddress,正如您所说,您并不是真正的 c++ 编码器,所以为什么要引入复杂性。如果您查看过其中任何一个,还必须有 n+1 个可用的 c++ 日志库。


    我在谷歌搜索后发现的一些

    【讨论】:

      【解决方案2】:

      为什么没有一个注册表项呢?用户打开 regedit,添加一个密钥,您的库开始记录。记录代码将一直存在,只是在密钥不存在或设置为“无记录”时不会调用。

      【讨论】:

      • 是的,可以做到。只是通常我不喜欢要求用户触摸他们的注册表。不过,我需要一个示例代码,或者一些日志库/框架的建议。
      • 是的,但是如果有问题,您可以远程打开日志记录,以及使用 dll 对用户来说更容易。
      猜你喜欢
      • 2016-04-22
      • 2016-03-04
      • 2011-12-29
      • 2013-10-22
      • 2018-06-13
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多