【发布时间】:2014-11-06 22:06:18
【问题描述】:
我正在使用 Visual Studio 2008、.net 框架 3.5、Windows 7 上的解决方案。我创建了一个 log4net 库,它写入一个 txt 文件,并希望在我的解决方案的多个项目中使用它与从 Visual Studio 本地运行的同一解决方案中的 wcf 服务。
我从解决方案上的控制台应用程序启动程序。控制台应用程序调用其他项目,这些项目使用 log4net。在工作流的这个级别,日志写得很好。调用 wcf 服务时会出现问题。 wcf 服务使用日志,但 log4net 不写入文件。
在控制台项目中我有这个:
在 AssemblyInfo.cs 上:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
在 App.config 我有 log4net 配置。
在 Program.cs 上,我拥有的 Main 方法:
LogManager.GetLogger("Initialise log4net from the current assembly attributes");
在 WCF 服务上我有这个:
AssemblyInfo.cs 上与控制台项目相同。
Web.config 上与控制台项目上的 App.config 相同。
关于 Service1.svc 的构造函数我有:
LogManager.GetLogger("Initialise log4net from the current assembly attributes");
这就是我的 App.config 和 Web.Config 的样子:
configSections 标签内:
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
在主配置标签内:
<log4net>
<root>
<level value="DEBUG"/>
<appender-ref ref="LogFileAppender" />
</root>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="C:\test3.txt"/>
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %-5p %c %m%n" />
</layout>
</appender>
</log4net>
我该如何解决这个问题?
【问题讨论】:
-
我从来没有设法让我的 WCF 服务使用程序集属性,最后我放弃了,只使用了
XmlConfigurator.ConfigureAndWatch(...) -
@stuartd 你是说我应该删除服务的 web.config 上的 log4net 部分,并将该部分留在服务上的 AssemblyInfo.cs 上。我做了那个改变,但服务仍然没有写入文件。
-
不,我从未设法让我的 WCF 服务通过程序集属性加载 log4net,因此我使用 XmlConfigurator 来配置日志记录。我没有花太多时间在上面,因为我想让日志记录工作并继续前进。
LogManager.GetRepository().Configured在调用 GetLogger 后是否返回 true? -
@stuartd 好的,所以 XmlConfigurator 将在后面的 c# 代码中完成......LogManager.GetRepository().Configured 返回 false。
-
@stuartd 你有 XmlConfigurator 的例子,所以我可以配置日志记录吗?