我想从 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/