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

标签 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 安装了该服务并启动了它(成功),但是,唉,没有 hello/goodbye 被记录下来。这种日志记录方式与我在另一个项目中使用的相同,并且没有任何问题。

为什么这次我打不通?

最佳答案

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

log4net.Config.XmlConfigurator.Configure();

关于c# - Windows 服务未在 C# 中写入其日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21164398/

相关文章:

c# - 我怎么知道我的 Windows 服务何时不工作

.net - 无法调试 Windows 服务 - 当前不会命中断点

.net - 没有用户登录时显示 GUI 的 Windows 服务

c# - 了解两种矩阵旋转算法的性能

c# - 这些事件回调将发生在哪个线程上?

.net - 作为服务运行时,带有 git build 的 CruiseControl.Net 失败

c# - View 模型在数据绑定(bind)之外的作用?

c# - 存储和引用数百个值的有效方法是什么?

C# 程序正在寻找 sql server compact 3.5,但我使用的是 4.0

c# - ASP.NET 中的两种数据绑定(bind)方式