【问题标题】:Reliable encrypted logging for .NET (4.0 - C#)?.NET (4.0 - C#) 的可靠加密日志记录?
【发布时间】:2011-08-23 06:30:32
【问题描述】:

我对 C# 比较陌生,所以请多多包涵。我正在为我的项目(桌面小型企业应用程序)寻找日志记录解决方案。我知道这个问题已经被问过无数次了,但我还有一些额外的要求和问题。

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

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

-加密日志文件(或允许完全自定义的日志记录 - 只写入它获得的内容,没有其他信息)

-免费

嗯,这就是我的要求清单。你知道有哪些适合的通行费吗?我读过有关 log4net 的信息,但它似乎很旧(使用 .NET 2.0 并且主要是重新发明轮子),nlog 听起来很有希望,因为它是异步的,但我再次认为它无法加密。另外我不知道它们是否都是完全线程安全的。

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

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

【问题讨论】:

    标签: c# .net multithreading logging


    【解决方案1】:

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

    创建您自己的侦听器,它将对发送的消息进行加密,或者您可以在发送之前对其进行加密。创建自己的听众的几个好处

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

    使用 ent lib 的主要缺点是配置通常可以是 PIA,如果您对它感到复杂的话。

    【讨论】:

      【解决方案2】:

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

      从 Encryption 开始,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));
      

      【讨论】:

      • 感谢您的帖子。我检查了你关于 NLog 多线程的帖子,但我不确定我是否做对了,你可以在多个线程中使用(发送日志)一个记录器而无需锁定?使用加密功能扩展 NLog 似乎需要相当多的工作/时间(因为我不知道 Nlog)。我认为我会花更少的时间来实现我自己的记录器。您是否知道我对 logger 的想法是否不好、有问题、会很慢、明显比 Nlog 差?
      • 创建自己的记录器是个坏主意,相信我。有很多帖子详细说明了为什么这是一个坏主意,其中包括您会逐渐意识到您有越来越多的需求,并且每次您都必须向自己的记录器添加功能。所以这将是重新发明轮子。 Nlog 非常简单,学习曲线也不是那么陡峭。我已经将它推到了多线程的极限,这就是为什么我不得不对基本的东西进行更多的调整。而且,不,如果你使用得当,你不必使用显式锁定。
      • 在文本上直接使用 RSA 是一种不当使用。仅当随机采样输入时,RSA 才被认为是安全的。通常,解决方案是使用混合密码系统,同时使用对称和非对称算法,其中非对称算法对随机数据或类似随机数据进行操作,而对称算法对实际用户数据进行操作。
      猜你喜欢
      • 2013-10-07
      • 1970-01-01
      • 2018-08-24
      • 2014-08-10
      • 2010-11-22
      • 2014-07-30
      • 2010-09-13
      • 1970-01-01
      • 2015-12-21
      相关资源
      最近更新 更多