我正在尝试让log4net用于Windows服务。它适用于控制台应用程序。
我已经创建了一个空白服务,它应该做的唯一事情是将一个日志语句写出来。
这是我的主要方法。
log4net.Config.XmlConfigurator.Configure();
log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
log.Info("Test");
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1()
};
ServiceBase.Run(ServicesToRun);
这是我的app.config文件:
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Test.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="1MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>
<root>
<level value="ALL" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
</configuration>
我还将此行添加到我的AssemblyInfo.cs文件中:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
根据我在网上阅读的所有内容,这应该足以在安装服务的目录中创建日志文件。当没有发生这种情况时,我尝试将绝对目录设为
log4net.Config.XmlConfigurator.Configure(new FileInfo("C:\\Users\\Public\\app.config"));
和
<file value="C:\Users\Public\Test.log" />
这也不起作用。我想也许这是一个疯狂的权限问题,因为该服务在一个可能受限制的帐户下运行,但我只是尝试以管理员身份运行它并且文件仍未创建。
我在这里做错了什么?
答案 0 :(得分:1)
这对我的安装项目来说是一个依赖性问题。安装程序每次都没有安装更新的项目,因此正在应用更改,但未安装。
答案 1 :(得分:0)
我认为您的服务无法写入您配置的路径。尝试使用一些专用的日志目录,并确保该服务有足够的权限写入此目录。
如果你的设置在app.config中,那么这足以配置它:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]