Windows服务未在C#中写入其日志文件

时间:2014-01-16 14:23:55

标签: c# .net windows-services log4net

我想从C#开始使用Windows服务。我将从一个简单的服务开始打印:

Hello (as soon service start)
Goodbye (as soon service stop)

这应该非常简单,而且真的,在VB.net中我会很容易实现这一点。所以我创建了一个新的 C#Windows服务项目,使用 nuGet包管理器导入log4net。 然后我就是服务类:

public partial class Service1 : ServiceBase
{
    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    public Service1()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        log.Info("hello");    
    }

    protected override void OnStop()
    {
        log.Info("goodbye");
    }
}

所以VS创建了静态类:

static class Program
{        
    static void Main()
    {
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[] 
        { 
            new Service1() 
        };
        log.Info("NewService1");
        ServiceBase.Run(ServicesToRun);
    }
}

这是带有 log4net 配置的App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>
    <log4net>
      <root>
        <level value="DEBUG" />
        <appender-ref ref="FileAppender" />
        <appender-ref ref="ConsoleAppender" />
      </root>
      <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file value="C:\logging\operativity.log" />
        <appendToFile value="true" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date{dd/MM/yyyy HH:mm:ss.fff} - %level - %message%newline" />
        </layout>
      </appender>
      <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date{dd/MM/yyyy HH:mm:ss} - %level - %message%newline" />
        </layout>
      </appender>
    </log4net>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

我已经安装了服务安装程序,因此我已经使用installutil安装了该服务并启动了它(成功),但是,唉,没有记录任何问候/告别。这种记录方式与我在另一个项目中使用的方式相同,并且没有任何问题。

为什么我这次不能打招呼?

1 个答案:

答案 0 :(得分:1)

假设您没有隐藏或删除示例中的任何代码,您需要在调用任何日志方法(Info,Debug等)之前配置log4net:

log4net.Config.XmlConfigurator.Configure();