我有一个WCF服务图层。它有3个项目, 线束项目(调试解决方案),Windows服务项目和具有业务逻辑的类库(BL项目)。
我已经为BL项目配置了log4net,如下所示。
装配信息cs
// Configure log4net using the .config file
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
log4net.config
<?xml version="1.0" encoding="utf-8" ?>
<log4netConfiguration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<appSettings>
<add key="log4net.Config" value="log4net.config" />
</appSettings>
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="C:\my_logs/my_service_logs/my_log_%date{ddMMyyyy}.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="30MB" />
<datePattern value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%4t %d{ABSOLUTE} %-5p %m%n"/>
<!--<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" />-->
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
</log4netConfiguration>
当我运行Harness项目时,日志记录工作完全正常。线束项目调用wcf服务,该服务响应传入的请求和日志而没有任何问题。
但是当我安装Windows服务时,以及通过网站登录调用BL时不起作用。
未为线束项目或Windows服务项目配置日志记录。
由于我一直在为不同的项目使用log4net,我确信我的配置是正确的。
但是为什么它在运行Windows服务时没有记录?这是某种安全问题吗? 对于日志文件/文件夹,我完全控制了所有用户。仍然没有记录。 请帮忙!
答案 0 :(得分:1)
log4net documentation for assembly attributes说:
因此,如果使用配置属性,则必须调用log4net 允许它读取属性。一个简单的电话 LogManager.GetLogger将导致调用程序集上的属性 被阅读和处理。 因此必须进行日志记录 在应用程序启动期间尽早调用,以及 当然,在加载和调用任何外部程序集之前。
因此,您需要将程序集属性移动到Windows服务中,并将这样的内容添加到Main
方法中:
LogManager.GetLogger("This call initialises the logging system from the current assembly attributes");
答案 1 :(得分:0)
在没有更多代码的情况下,确切地指出了问题是什么,但我知道服务对于which folder they are running in来说可能很棘手。您应该尝试调试服务(在代码中使用System.Diagnostics.Debugger.Launch()
自动附加到它)并检查它的当前目录是什么。