我有许多自定义对象渲染器,以便我可以将我的日志语句保持为DRY。当我第一次部署我的应用程序时,log4net无法识别自定义渲染器,但它确实正确地执行了其他所有操作。如果我触摸配置文件(使其看起来已更改),文件观察程序将获取更改并且渲染器开始工作。但是一段时间后他们再次停止工作,我不得不再次触摸log4net配置文件。
设置是.Net 3.5(sp1)wcf应用程序。问题出现在vs 2008开发Web服务器和win 7上的IIS 7上。我有一个名为log4net.config的配置文件,我正在使用AssemblyInfo方法指向它。
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
我访问记录器的方法是通过在类上使用静态成员,如此。
private static readonly ILog log = LogManager.GetLogger(typeof(Service));
渲染器的配置与此类似。
<renderer renderingClass="MyCompany.Log4net.SearchRequestRenderer, MyCompany.Log4net" renderedClass="System.DirectoryServices.Protocols.SearchRequest" />
这些渲染器都与正在进行日志记录的主要部件分开。我错过了什么或做错了什么?我不知道为什么它不会立即识别渲染器,然后再次忘记它们。
答案 0 :(得分:1)
我找到了答案。我必须为渲染类包含更多的汇编信息。
<renderer renderingClass="MyCompany.Log4net.SearchRequestRenderer, MyCompany.Log4net" renderedClass="System.DirectoryServices.Protocols.SearchRequest" />
成了
<renderer renderingClass="MyCompany.Log4net.SearchRequestRenderer, MyCompany.Log4net" renderedClass="System.DirectoryServices.Protocols.SearchRequest, System.DirectoryServices.Protocols, Version=2.0.0.0 , Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />