.NET的可靠加密日志记录(4.0 - C#)?

时间:2011-05-11 12:16:06

标签: c# .net multithreading logging

我对C#比较新,所以请耐心等待。我正在寻找我的项目(桌面小型企业应用程序)的日志记录解决方案。我知道这已被问过无数次,但我有一些额外的要求和问题。

是否有.NET的日志记录工具(以下所有内容):

- 可靠(记录发送到记录器的所有内容,即使是崩溃前的最后一个异常,log4net也不保证)
- 快(不阻止来电者 - >异步)
- 线程安全(可以同时从多个线程调用并写入一个文件)

- 加密日志文件(或允许完全自定义日志记录 - 仅写入内容,无其他信息)

-free

嗯,这是我的要求清单。你知道任何合适的收费吗?我读过关于log4net的内容,但它似乎很旧(使用.NET 2.0并主要重新发明轮子),nlog听起来很有前途,因为它是异步的,但我认为它再也无法加密。另外我不知道它们是否完全是线程安全的。

我应该写自己的小记录器吗?我考虑过创建日志记录线程,日志列表(或队列),并使用锁定附加到列表中的相应日志,日志记录线程将转换(可能转换为字符串,或某些部分转换为字符串)日志对象,加密它们并保存它们尽快到文件中。

你觉得我应该怎么做? 感谢您的想法和答案。

2 个答案:

答案 0 :(得分:3)

您可以使用Microsoft Enterprise Library 5.0 logging 。您可以使用MSMQ目标将其完全异步。使用加密件,您有几个选择。

创建您自己的侦听器,它将对发送的邮件进行加密,或者您可以在发送之前对其进行加密。创建自己的监听器的几个很好的方面

  • 发件人不必“知道”如何加密。这意味着如果您的加密策略发生了变化,您只需在一个对象中对其进行编码即可。
  • 根据环境相对容易配置不同的行为。

使用ent lib的主要缺点是一般情况下配置可能是PIA,如果你复杂的话。

答案 1 :(得分:2)

与Log4Net相反,NLog仍在维护。是的,它是线程安全的。 请参阅my post
您只需要根据您的用例场景知道如何正确使用它。

从加密开始,NLog非常易于扩展,您可以编写自己的日志目标,在将内容发送到文件(或其他)之前加密内容。有很多图书馆提供这样的实用程序(RSA等)。

您可以在将加密服务中的内容发送到日志实用程序本身之前对其进行无缝加密。以下是一个初学者代码示例,取自this post

var provider = new System.Security.Cryptography.RSACryptoServiceProvider();
provider.ImportParameters(your_rsa_key);

var encryptedBytes = provider.Encrypt(
System.Text.Encoding.UTF8.GetBytes("Hello World!"), true);

string decryptedTest = System.Text.Encoding.UTF8.GetString(
provider.Decrypt(encryptedBytes, true));