如何为.NET Core 3.0 Worker服务设置事件日志 - c#

我正在使用带有.NET Core 3.0预览版的新Worker Service应用程序模板,并尝试使用AddEventLog方法添加事件日志记录。但是,我无法通过Windows中的事件查看器看到任何日志。

我有一个非常简单的Worker应用程序设置,并配置了Program.cs文件中的日志记录,如下所示:

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
    .UseWindowsService()
    .ConfigureLogging((context, logging) =>
    {
        logging.AddEventLog(new EventLogSettings()
        {
            SourceName = "MyTestSource",
            LogName = "MyTestLog"
        });
    })
    .ConfigureServices((hostContext, services) =>
    {
        services.AddHostedService<Worker>();
    });

然后,我在Worker.cs文件中有一些日志记录语句,如下所示:

private readonly ILogger<Worker> _logger;

public Worker(ILogger<Worker> logger)
{
    _logger = logger;
}

public override async Task StartAsync(CancellationToken cancellationToken)
{
    _logger.LogInformation($"Worker started at: {DateTime.Now}");
    await base.StartAsync(cancellationToken);
}

public override async Task StopAsync(CancellationToken cancellationToken)
{
    _logger.LogInformation($"Worker stopped at: {DateTime.Now}");
    await base.StopAsync(cancellationToken);
}

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
    while (!stoppingToken.IsCancellationRequested)
    {
        _logger.LogInformation( $"Worker running at: {DateTime.Now}");
        await Task.Delay(1000, stoppingToken);
    }
}

要设置事件日志,我从提升的Powershell提示符中运行了以下命令:

New-EventLog -LogName MyTestLog -Source MyTestSource

如果打开事件查看器,则可以在“应用程序和服务日志”下面看到“ MyTestLog”。

然后,要将我的Worker设置为Windows服务,我从提升的命令提示符下运行了以下命令:

dotnet publish -o publish(将项目发布并输出到发布目录)

sc create MyTestService binPath=<path to exe in publish directory>

该服务已成功创建,我可以在“服务”查看器应用程序中看到它。从那里,我手动启动该服务,然后在“事件查看器”中返回并没有显示任何日志。

我期望会有一些日志。但是,“ MyTestLog”部分在事件查看器中保持为空。

参考方案

因此,我能够找到报告为here的问题。

从本质上讲,它可以归结为最新的.NET Core 3.0预览版中的更改,其中默认情况下现在以警告级别过滤事件日志。因此,您看不到任何信息日志。

解决方法是简单地编辑appsettings.json文件,如下所示:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    },
    "EventLog": {
      "LogLevel": {
        "Default": "Information",
        "Microsoft.Hosting.Lifetime": "Information"
      }
    }
  }
}

这将覆盖默认设置,并允许再次查看信息日志。

ASP.NET Core Singleton实例与瞬态实例的性能 - c#

在ASP.NET Core依赖注入中,我只是想知道注册Singleton实例是否会比注册Transient实例更好地提高性能?在我看来,对于Singleton实例,创建新对象和相关对象只需花费一次时间。对于Transient实例,此成本将针对每个服务请求重复。因此Singleton似乎更好。但是,在Singleton上使用Transient时,我们可以获得多…

如何在ASP.NET Core Web应用程序中增加JSON反序列化MaxDepth限制 - c#

我们正在将ASP.NET Core 2.1与.NET Framework 4.6.2结合使用。我们有一个客户需要向我们的Web应用程序发送一个很大程度上嵌套的json结构。当他们进行此调用时,我们将输出以下日志并返回错误: 读取器的MaxDepth超过了32。路径“ super.long.path.to property”,第1行,位置42111。”我浏览了…

将Web服务迁移到.NET Core 2.0并返回json - c#

我已经将Web服务迁移到.NET Core 2.0,它可以正常工作,但是在以json字符串获取响应时遇到问题。api上的方法: [HttpGet] [ProducesResponseType(typeof(string), 200)] [ProducesResponseType(typeof(EntityNotFoundErrorResult), 404)]…

.NET Core 2从内存流下载Excel文件 - c#

我当时在.NET Core项目中工作,当时我应该从记录创建电子表格文件并下载它而不将其保存在服务器中。搜索上述标题并没有多大帮助,但给出了一些指示。另外,ASP.NET中使用的大多数方法在.NET Core中均不起作用。因此,我最终可以想出一个效果很好的解决方案。我将在下面的答案中与那些愿意像我一样进行搜索的人分享。 参考方案 首先,您需要安装EPPlus.…

ASP.NET Core-在Singleton注入上存储库依赖项注入失败 - c#

我正在使用SoapCore为我的ASP.NET Core MVC应用程序创建Web服务。我正在使用Entity Framework Core和简单的存储库模式来获取我的数据库数据。我通过Startup.cs中的.AddSingleton()注入存储库类:services.AddSingleton<IImportRepository, ImportRep…