C# 为web应用程序和windows应用程序开发记录器DLL的好方法

C# 为web应用程序和windows应用程序开发记录器DLL的好方法,c#,asp.net,logging,simultaneous-calls,C#,Asp.net,Logging,Simultaneous Calls,让我们从上下文开始 在我的工作中,我被要求在我的项目(ASP.NET中的一个web应用程序)中添加一些日志功能 我的想法是,我可以为我的项目做这件事,但那不是很有用!因此,我想创建一个DLL,可以在其他项目(webapps或windows apps)中使用 所以我计划了这些功能: 用于配置的XML文件:文件的日志级别、文件的位置、保存时间、写入新日志文件之前的最大大小。例如,我可以有一个日志文件,其中只写入错误和关键日志,另一个文件将写入信息和警告日志 能够登录web应用程序或win应用程序

让我们从上下文开始

在我的工作中,我被要求在我的项目(ASP.NET中的一个web应用程序)中添加一些日志功能

我的想法是,我可以为我的项目做这件事,但那不是很有用!因此,我想创建一个DLL,可以在其他项目(webapps或windows apps)中使用

所以我计划了这些功能:

  • 用于配置的XML文件:文件的日志级别、文件的位置、保存时间、写入新日志文件之前的最大大小。例如,我可以有一个日志文件,其中只写入错误和关键日志,另一个文件将写入信息和警告日志

    • 能够登录web应用程序或win应用程序
但问题就在这里,我在考虑可能出错的不同事情,我想在开发它之前确定我做了什么

首先,我必须检测它是web应用程序还是windows应用程序。我发现了一些有用的东西,比如

然后我在考虑如何写日志,每次我写一行日志时,我都必须打开和关闭我的文件。我觉得这是一种非常贪婪的表演。我错了吗?还有别的办法吗

还应该指出,从web应用程序或多线程windows应用程序进行日志记录时可能会出现问题。另一个问题是log方法可能一次调用两次(2次),这将导致同时访问日志文件的问题。处理这些问题的最佳方式是什么

最后,我想知道您是否看到任何其他可能成为此类dll问题的东西


谢谢你的帮助!:)

重新发明轮子是不值得的。您可以查看log4net库。
Log4net支持将日志写入TXT、XML、SQL、MSMQ等格式。我的建议是,写入大量日志会在一定程度上阻碍应用程序的执行。因此,我不做TXT或SQL日志记录,而是选择MSMQ日志记录(它的fire and forget不会阻塞您的应用程序代码)。使用windows服务读取消息队列并将日志写入单独的SQL数据库

重新发明轮子是不值得的。您可以查看log4net库。
Log4net支持将日志写入TXT、XML、SQL、MSMQ等格式。我的建议是,写入大量日志会在一定程度上阻碍应用程序的执行。因此,我不做TXT或SQL日志记录,而是选择MSMQ日志记录(它的fire and forget不会阻塞您的应用程序代码)。使用windows服务读取消息队列并将日志写入单独的SQL数据库

你可以试试艾玛 或 要记录:
正如log4net(可能小于log4net)一样,两者都是“经典”。正如前面的答案所说,除了一种编码乐趣之外,再发明轮子是没有好处的。

你可以试试ELMAH 或 要记录:
正如log4net(可能小于log4net)一样,两者都是“经典”。正如前面的回答所说,除了一种编码乐趣之外,重新发明轮子没有任何好处。

虽然您当然可以编写一个漂亮的、可重用的日志库,但您的时间可能最好花在使用现有的日志库上。请看一下
log4net
nlog
或其他内容。他们已经解决了你的大部分问题。为什么需要区分Web应用程序和桌面应用程序?您可能会在Web应用程序中寻找这一点,不需要对代码进行任何到最小的更改。请尝试应用程序洞察:事实上,即使使用现有库也是一个好的快速选项。这些问题的答案可能会很有趣,即使不是针对本项目。虽然您当然可以编写一个漂亮的、可重用的日志库,但您最好使用现有的日志库。请查看
log4net
nlog
或其他内容。他们已经解决了你的大部分问题。为什么需要区分Web应用程序和桌面应用程序?您可能会在Web应用程序中寻找这一点,不需要对代码进行任何到最小的更改。请尝试应用程序洞察:事实上,即使使用现有库也是一个好的快速选项。这些问题的答案可能会很有趣,即使不是为了这个项目。我可能正试图重新发明轮子,是的。也许我最终会用一个现有的解决方案来解决这个问题是的,我很确定所有的解决方案都非常好。但无论如何,重写这本书对我来说是一个很好的练习。我仍然是我工作的学徒,我必须学习。我知道有一些工具可以很容易地做到这一点。但无论如何,我想尝试,甚至只是想学习如何处理这些问题。知识不能是无用的,我认为……尝试一下是完全合理的——但有效地使用工业实力日志库也是一项值得学习的技能,从长远来看,这将是非常有价值的:——)我完全同意,我注意到了你的所有建议,可能很快就会看一看。但无论如何,我都会努力找到这些答案,即使是对我来说。我可能正在尝试重新发明轮子,是的。也许我最终会用一个现有的解决方案来解决这个问题是的,我很确定所有的解决方案都非常好。但无论如何,重写这本书对我来说是一个很好的练习。我仍然是我工作的学徒,我必须学习。我知道有一些工具可以很容易地做到这一点。但无论如何,我想尝试,甚至只是想学习如何处理这些问题。知识不能是无用的,我认为……尝试一下是完全合理的——但有效地使用工业实力日志库也是一项值得学习的技能,从长远来看,这将是非常有价值的:——)我完全同意,我注意到了你的所有建议,可能很快就会看一看。但无论如何,我会努力找到这些答案,哪怕只是为了我自己。