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

可靠的.NET加密日志记录(4.0-C#)?,c#,.net,multithreading,logging,C#,.net,Multithreading,Logging,我对C#比较陌生,所以请容忍我。我正在为我的项目(桌面小企业应用程序)寻找一个日志解决方案。我知道这已经被问了无数次了,但我还有一些额外的要求和问题 是否有针对.NET的日志记录工具(以下所有工具): -可靠(记录发送到记录器的所有内容,即使是崩溃前的最后一个异常,log4net也不能保证) -快速(不阻止调用方->异步) -线程安全的(可以同时从多个线程调用并写入一个文件) -加密日志文件(或允许完全自定义日志记录-只写入所获取的内容,不写入其他信息) -免费的 这是我的要求清单。你知道什么收

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

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

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

-加密日志文件(或允许完全自定义日志记录-只写入所获取的内容,不写入其他信息) -免费的

这是我的要求清单。你知道什么收费合适吗?我读过关于log4net的书,但它似乎很老(使用.NET2.0,主要是重新发明轮子),nlog听起来很有希望,因为它是异步的,但我再次认为它不能加密。我也不知道它们是否都是线程安全的

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

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

NLog仍然保留,与Log4Net相反。是的,它是线程安全的。 看看这个
您只需要知道如何根据您的用例场景正确地使用它

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

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

你可以用。您可以使用MSMQ目标来实现完全异步。使用加密部件,您有两种选择

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

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

使用entlib的主要缺点是,如果您的配置变得复杂,那么它通常可能是一个PIA

谢谢你的帖子。我用NLog查看了你关于多线程的帖子,但我不确定我是否正确,你可以跨多个线程使用(发送日志)一个记录器而不锁定?用加密功能扩展Nlog似乎需要花费相当多的工作/时间(因为我不知道Nlog)。我想我花更少的时间来实现自己的目标。你可能知道我关于记录器的想法是否不好、有问题、速度慢、明显比Nlog差吗?相信我,创建自己的记录器是个坏主意。有很多帖子详细说明了这是一个坏主意的原因,其中包括一个事实,即你会一点一点地意识到你有越来越多的需求,每次你都必须为自己的日志添加功能。因此,这将是重新发明轮子。Nlog非常简单,学习曲线也没有那么陡峭。我已经在多线程技术中将它推向了极限,这就是为什么我不得不调整一些东西而不是基本的东西。而且,如果使用正确,不必使用显式锁定。直接在文本上使用RSA是不正确的。只有当输入随机采样时,RSA才被认为是安全的。通常,解决方案是使用使用对称和非对称算法的混合密码系统,其中非对称算法对随机数据或类似随机数据进行操作,而对称算法对实际用户数据进行操作。
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));