9

I'm trying to log to the Event Viewer in an ASP.NET Core 2.1 Web API, hosted on Windows Server 2016 Standard.

I've got this in my controller:

private readonly ILogger<MyController> _logger;
private readonly MyContext _context;

public TestController(MyContext context, ILogger<MyController> logger)
{
    _context = context;
    _logger = logger;
}

But I think I'm doing something wrong in my CreateWebHostBuilder() method in Program.cs because it's not working:

I had this:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();

and I modified it to this:

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

But I must be doing something wrong... Any ideas? I read here that apparently EVent Viewer logging is now baked into .Net Core 2.1 Write to EventLog in .Net Core

TylerH
  • 20,799
  • 66
  • 75
  • 101
Fabricio Rodriguez
  • 3,769
  • 11
  • 48
  • 101
  • Looking at another example, I've added loggerFactory.AddEventLog(); to my Configure() methos in Startup.cs, but it's not finding the AddEventLog() method ('ILoggerFactory' does not contain a definition for 'AddEventLog'...) – Fabricio Rodriguez Sep 13 '18 at 09:09

2 Answers2

14

For anyone who stumbles upon this using .NET Core 2.2, the Event Log logger (from Microsoft.Extensions.Logging.EventLog) should now be added in the Program.cs:

public static void Main(string[] args)
{
    CreateWebHostBuilder(args).Build().Run();
}

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureLogging((context, logging) =>
        {
            logging.AddEventLog();
        })
        .UseStartup<Startup>();

This is noted at the bottom of the .NET Core Logging docs.

UPDATE: In case someone still lands here post .NET Core 2.2, this is still relevant for .NET Core 3.1 logging.

Tom Faltesek
  • 2,768
  • 1
  • 19
  • 30
  • 6
    Note you need to add another nuget package: Microsoft.Extensions.Logging.EventLog which not included in the Microsoft.Extensions.Logging package – arik Jul 07 '19 at 10:56
6

Ok, I had to add Microsoft.Extensions.Logging.EventLog to the project (from Nuget).

Then, in Startup.cs:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
   loggerFactory.AddEventLog();
}
Fabricio Rodriguez
  • 3,769
  • 11
  • 48
  • 101