带有Windows服务的Log4net

时间:2011-06-27 15:31:31

标签: visual-studio-2010 logging windows-services log4net

我正在尝试让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" />

这也不起作用。我想也许这是一个疯狂的权限问题,因为该服务在一个可能受限制的帐户下运行,但我只是尝试以管理员身份运行它并且文件仍未创建。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

这对我的安装项目来说是一个依赖性问题。安装程序每次都没有安装更新的项目,因此正在应用更改,但未安装。

答案 1 :(得分:0)

我认为您的服务无法写入您配置的路径。尝试使用一些专用的日志目录,并确保该服务有足够的权限写入此目录。

如果你的设置在app.config中,那么这足以配置它:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]