ASP.NET Core事件日志提供程序

10

我有一个使用.NET Framework ASP.NET Core 2.0的项目,并希望实现将日志记录到Windows事件日志,就像我在这里所读的那样。

添加日志提供程序

public class Program
{
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
            .ConfigureLogging((hostingContext, logging) =>
            {
                logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
                logging.AddEventSourceLogger();
                logging.AddConsole();
            })
            .UseStartup<Startup>()
            .Build();
    }

控制器

[Route("api/[controller]")]
public class ShortCodeController : Controller
{
        private readonly ILogger _logger;

        public ShortCodeController(ILogger<ShortCodeController> logger)
        {
            _logger = logger;

            _logger.LogInformation("INIT");
        }

        [HttpGet("{letters}/{digits}/{length}")]
        public string Get(bool letters, bool digits, int length)
        {
            _logger.LogError("TEST");

            return "value";
        }
    }

它适用于控制台,我可以看到我的日志消息。但我在使用事件查看器中找不到那些消息的事件日志。为什么?


1
你使用logging.AddEventSourceLogger()而不是建议中的logging.AddEventLog()(https://learn.microsoft.com/en-us/aspnet/core/fundamentals/logging/?tabs=aspnetcore2x#eventlog)有什么原因吗? - mjwills
在dotnet core 3.1中,.ConfigureLogging((hostingContext, logging) =>变成了.ConfigureLogging((logging) =>。详情请见https://learn.microsoft.com/en-us/aspnet/core/fundamentals/logging/?tabs=aspnetcore2x&view=aspnetcore-3.1#windows-eventlog-provider。 - joym8
3个回答

8
logging.AddEventSourceLogger()

这段文字是关于 事件追踪

如果要记录 事件日志,可以使用以下内容:

logging.AddEventLog()

这与特定的问题和答案有点相关。无论如何,我已经从程序包管理器控制台运行了以下命令:“Install-Package Microsoft.Extensions.Logging.EventLog -Version 2.0.0”,现在我可以看到它了。 - JsonStatham
我的回答中的https://learn.microsoft.com/en-us/aspnet/core/fundamentals/logging/?tabs=aspnetcore2x#eventlog链接包含所需的NuGet软件包链接。 - mjwills
@thepirat000 这个问题的背景明确表示不想要 AddEventSourceLogger,所以我很困惑你为什么会添加那个评论? - mjwills
这个工作,但只有错误级别的消息被添加到事件日志中。我将最低级别设置为调试 - 没有效果。 - Alexei Sosin
显示剩余4条评论

4

从Nuget安装Microsoft.Extensions.Logging.EventLog。

在program.cs文件中包含Microsoft.Extensions.Logging.EventLog

然后logging.AddEventLog()将成为可能,因此您将能够实现您的目标


3
我在事件日志查看器中仍然找不到任何日志消息。您知道默认的事件源名称是什么吗? - Will Huang

2

但我在事件查看器中找不到那些信息。为什么?

除非您使用系统识别的LogName和SourceName,否则事件日志将会给您一个无意义的错误消息。

这对我来说在net5.0上运行良好:

 public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureLogging(logging =>
                            {
                                logging.ClearProviders();
                                logging.AddEventLog(new EventLogSettings()
                                        {
                                            SourceName = ".NET Runtime",
                                            LogName = "Application",
                                        });
                            }
                         )
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接