猿问

为什么在重新启动服务之前我的 Windows 服务不记录

我使用TopShelf创建了一个Windows 服务,使用Log4Net添加了日志记录,然后构建了项目,安装了服务并启动了服务。然后我的服务运行良好,但没有记录。该TopShelf日志出现,但不是我的日志添加到我的Windows服务。更奇怪的是,如果我重新启动Windows Service,日志记录开始工作。


我已经创建了一个小项目的GitHub 存储库,如果你想克隆它并自己重现问题,它会重现这个问题。


如何判断它是否有效

该服务应创建两个文件,一个只显示“Hello World”,另一个包含所有日志。如果日志文件成功记录了该行,它将起作用:Why is this line not logged?


如果该行没有出现在log.txt文件中,那么我的问题没有解决。


注意:如果您单击Visual Studio 中的开始按钮,则会显示此行,但我希望它在安装服务并启动服务时工作。如果服务启动,然后重新启动,它也可以工作,但这似乎更像是一个黑客而不是修复。


项目描述

这就是我设置服务的方式。我使用.Net Framework 4.6.1创建了一个新的C# 控制台应用程序并安装了 3 个NuGet包:


<?xml version="1.0" encoding="utf-8"?>

<packages>

  <package id="log4net" version="2.0.8" targetFramework="net461" />

  <package id="Topshelf" version="4.0.4" targetFramework="net461" />

  <package id="Topshelf.Log4Net" version="4.0.4" targetFramework="net461" />

</packages>

然后我创建了Windows 服务:


using log4net.Config;

using System.IO;

using Topshelf;

using Topshelf.HostConfigurators;

using Topshelf.Logging;

using Topshelf.ServiceConfigurators;


namespace LogIssue

{

    public class Program

    {

        public const string Name = "LogIssue";


        public static void Main(string[] args)

        {

            XmlConfigurator.Configure();

            HostFactory.Run(ConfigureHost);

        }


        private static void ConfigureHost(HostConfigurator x)

        {

            x.UseLog4Net();

            x.Service<WindowsService>(ConfigureService);


            x.SetServiceName(Name);

            x.SetDisplayName(Name);

            x.SetDescription(Name);


            x.RunAsLocalSystem();

            x.StartAutomatically();

            x.OnException(ex => HostLogger.Get(Name).Error(ex));

        }


慕斯709654
浏览 198回答 2
2回答
随时随地看视频慕课网APP
我要回答