.net – 使用log4net创建记录器库的最佳实践.是
我的目标是创建一个可以跨多个项目共享的log4net库.
在我的.net 4.0解决方案中,我创建了一个名为Logger的类库,并从Web项目中引用它. 现在我在类库中创建了一个logger.config,并将所有配置放在logger.config文件中.然后我用了 [assembly: log4net.Config.XmlConfigurator(Watch = true,ConfigFile = "Logger.config")] 当我运行Web应用程序时,没有任何记录.所以我在web.config中添加了这行代码 <add key="log4net.Internal.Debug" value="true"/> 这给了我调试信息和错误信息 无法在应用程序的.config文件中找到配置节’log4net’.检查.config文件中的和元素.配置部分应如下所示: 我将配置从logger.config移动到web.config,一切似乎都正常. 我不想在web.config中使用log4net配置,但将logger.config作为一种更清洁的方法.目标是使其他项目使用此库,而不必担心每个项目中的配置. 现在的问题是,我该怎么做?我究竟做错了什么?任何带代码示例的建议都将对每个人都有益. 仅供参考,我正在使用结构图IOC在登录之前重新获得记录器. 解决方法
我相信您正在尝试重新发明轮子,有几种工具可以从您的代码中抽象记录器将记录器框架与代码分离:
http://slf.codeplex.com/ http://netcommon.sourceforge.net/ 这些是.Net应用程序中最常见的. 那么现在如果你坚持使用你自己的抽象(这是有效的),这是我的建议: 首先,我假设你会有类似的东西: interface ILogger { void Debug(string message); void Info(string message); void Warn(string message); ….. } 好的,在您的代码中,您将注入记录器的单例引用,例如: x.For<ILogger>().Singleton().Use<MyLogger>(); 现在,我通常更喜欢约定优于配置,但对于记录器,通过配置文件进行配置是一个很大的优势,因为当您的代码处于生产状态时,您有时需要通过禁用或启用记录器来更改记录规则,更改日志级别,并启用/禁用命名记录器. 我发现实现这一目标的最简单,最可重用的方法是在评论时将配置放在外部文件中,然后我就不用在代码中调用XmlConfigurator,因为我只需添加几个应用程序设置就可以了.我的配置文件是这样的 <!-- Relative to the application root path --> <add key="log4net.Config" value="Logger.log4net"/> <add key="log4net.Config.Watch" value="True"/> 而已.这些应用程序设置会覆盖您的log4net配置,并且易于维护.您的配置文件如下所示: <?xml version="1.0" encoding="utf-8" ?> <!-- This section contains the log4net configuration settings --> <log4net> <!-- Define some output appenders --> <appender name="LogFileAppender" type="log4net.Appender.FileAppender" > <file value="webapp-log.txt" /> <appendToFile value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /> </layout> </appender> <!-- Setup the root category,add the appenders and set the default priority --> <root> <level value="DEBUG" /> <appender-ref ref="LogFileAppender" /> </root> </log4net> 配置更多appender:click here 在您的项目中,您只需要对logger抽象组件的引用,并且只需在Web项目(或Windows应用程序中,它是相同的)添加log4net配置文件,只需添加那些应用程序设置 由于您正在创建可重用的组件,我建议您在组织中设置一个内部Nuget服务器(它只是一个IIS应用程序)并使用它来部署组件,在这种情况下是包含记录器的库.如果你创建一个只包含应用程序设置和log4net配置文件的不同Nuget包,那也更好,所以你只能在你的web项目中安装这个Nuget包 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET登录控件布局模板失败文本
- 是否使用ASP.NET配置文件?
- asp.net – 错误BC30456:'[方法]’不是’ASP.[CodeBeh
- asp.net-mvc-3 – 如何为MVC3生成服务和存储库层
- ASP.Net身份注销
- asp.net-core – ASP .NET vNext MVC没有传递给下一个管道?
- .net – 什么是Automapper?
- asp.net – System.Web.Security.MembershipProvider在哪里
- asp.net – WSDL.exe工具的/ serverInterface和/ server选项
- asp.net-mvc – MVVM ViewModel vs. MVC ViewModel
- asp.net-core – ASP.NET核心DisplayAttribute本
- 实体框架 – EF Codefirst和RDLC Reports
- 初识ABP vNext(11):聚合根、仓储、领域服务、
- asp.net-mvc – 在asp.net mvc控制器中使用构造函
- ASP.NET MVC:访问日志
- 如何在ASP.NET MVC中具有相同名称的文件夹和控制
- asp.net – 将ControlParameter添加到SqlDataSou
- asp.net-mvc – 为什么我的MVC应用程序中有两个w
- asp.net-mvc – ASP.NET MVC – 处理没有返回对象
- asp.net-mvc-3 – 如何在MVC3中键入时过滤占用