帮我找到asp.net应用程序的最小摩擦记录解决方案

时间:2011-06-13 17:21:52

标签: c# .net asp.net logging

让我们说,为了论证,我有30个需要拥有日志框架的asp.net Web应用程序(和站点,blerg)。我目前的解决方案是使用企业库日志记录。在网站上进行此操作需要执行以下步骤:

  1. 添加对两个程序集的引用(EL Logging和Common)
  2. 将代码添加到Global.asax.cs以获取通用的未处理错误捕获
  3. 复制到enterpriseLibrary.config中,从另一个已经有日志记录的应用程序中复制
  4. 复制FileConfigurationSource.cs(允许您覆盖对enterpriseLibrary.config的硬编码路径的要求)
  5. 将FileConfigurationSource.cs中的命名空间更改为新项目
  6. 从另一个特定于EL(2个部分)的项目中复制web.config部分
  7. 更改新项目中EL的web.config中的命名空间
  8. 测试并确保它正常工作(通常通过使数据库脱机)
  9. 所有这些都是我所说的摩擦。如果你问我,那就是很多违反DRY的行为,特别是在所有的enterpriseLibrary.config设置中。理想情况下,添加日志记录将是一个两步过程 - 这将有助于我在整个团队中采用它。

    我想知道.net的日志记录解决方案是否没有所有这些重复?我能找到的所有这些(log4net,nlog,EL Logging)似乎都使用这个“每个应用程序都有自己的配置,并且有大量的重复”模式。也许我错过了一些东西。

    在实践中,我们的每个应用程序都将拥有与其他应用程序99%相同的日志记录解决方案。它们存储日志的位置和应用程序的调用方式不同。有没有办法使用三大日志记录解决方案之一,让您在机器级别或更集中的位置设置日志记录行为?我意识到拥有集中式日志记录配置存在缺点。

    同样重要的是:必须能够动态更改日志级别 (不在web.config中存储日志记录配置,导致应用程序重新启动),并且日志记录必须可配置为部署的一部分(不希望在测试版服务器上发送关于错误信息的电子邮件)。这两个使用web.config转换很困难,因为在.config上运行转换作为构建的一部分而不是web.config很困难。

1 个答案:

答案 0 :(得分:1)

我找到了一个类似于你的问题的完美解决方案。

我有十个控制台应用程序,两个ASP .NET网站和三个SharePoint webparts 记录到一个目录,日志按日期分隔,应用程序名称等。该解决方案非常易于配置和灵活并且允许动态配置更改

所有这些荣耀都由NLog赋予生命,它允许单个配置文件included来自特定于应用程序的配置文件。

更具体地说,在我们的案例中,每个项目都包含个人 NLog配置,其内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true">
  <include file="PATH TO THE SHARED CONFIG" /> <!-- change this line -->
</nlog>

对于 web 应用程序,单独的NLog配置can be read from

  • 标准网络应用程序文件web.config
  • web.nlogweb.config
  • 位于同一目录中 应用程序目录中的
  • NLog.config
  • NLog.dll.nlog位于NLog.dll所在的目录

共享配置文件可以放在 ASP .NET进程可以读取的任何地方,并且还有autoReload="true"允许进行即时修改。在我们的例子中,它为日志消息定义了不同的targets,例如电子邮件,不同目录中的日志文件等等。