让我们说,为了论证,我有30个需要拥有日志框架的asp.net Web应用程序(和站点,blerg)。我目前的解决方案是使用企业库日志记录。在网站上进行此操作需要执行以下步骤:
所有这些都是我所说的摩擦。如果你问我,那就是很多违反DRY的行为,特别是在所有的enterpriseLibrary.config设置中。理想情况下,添加日志记录将是一个两步过程 - 这将有助于我在整个团队中采用它。
我想知道.net的日志记录解决方案是否没有所有这些重复?我能找到的所有这些(log4net,nlog,EL Logging)似乎都使用这个“每个应用程序都有自己的配置,并且有大量的重复”模式。也许我错过了一些东西。
在实践中,我们的每个应用程序都将拥有与其他应用程序99%相同的日志记录解决方案。它们存储日志的位置和应用程序的调用方式不同。有没有办法使用三大日志记录解决方案之一,让您在机器级别或更集中的位置设置日志记录行为?我意识到拥有集中式日志记录配置存在缺点。
同样重要的是:必须能够动态更改日志级别 (不在web.config中存储日志记录配置,导致应用程序重新启动),并且日志记录必须可配置为部署的一部分(不希望在测试版服务器上发送关于错误信息的电子邮件)。这两个使用web.config转换很困难,因为在.config上运行转换作为构建的一部分而不是web.config很困难。
答案 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.nlog
与web.config
NLog.config
NLog.dll.nlog
位于NLog.dll
所在的目录 共享配置文件可以放在 ASP .NET进程可以读取的任何地方,并且还有autoReload="true"
允许进行即时修改。在我们的例子中,它为日志消息定义了不同的targets,例如电子邮件,不同目录中的日志文件等等。