Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I use ILoggerFactory in ASP.NET MVC 5 (not mvc core) project?

I want to create a logging framework in my asp.net MVC 5 project. My Startup class looks like this:

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);
    }
}

However, when I look at ASP.Net MVC Core project, the Startup class is like this:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

Is it possible to include ILoggerFactory in MVC 5? If this is possible, how should I initialize/register it? Is it something that needs to be done in global.asax or Startup?

like image 731
Hooman Bahreini Avatar asked Oct 18 '17 06:10

Hooman Bahreini


2 Answers

All of the Microsoft.Extensions.* types, including the Logging system, are usable outside of ASP.NET Core. In fact, they're used in Entity Framework Core, which is not part of ASP.NET Core.

To use it in any app, just new up the types you need to use and start calling them - there's nothing magical about it. And, of course, because it's not in an ASP.NET Core app, you don't get automatic dependency injection (DI) (because ASP.NET Core is what wires that up).

In the case here, it's probably simplest to use LoggerFactory directly and all the APIs that come from that.

In fact, if you look at the unit tests for many of the types in Logging, they have a pattern that is similar to what you would do when not using DI:

https://github.com/aspnet/Logging/blob/9f642fd125b723b0cd3bbfd7d6bb58f7daee233f/test/Microsoft.Extensions.Logging.Test/LoggerTest.cs#L114-L120

That code creates a logger factory, adds a logger provider (you can use Console, EventLog, custom, etc.), and then logs an Information message to it:

        var loggerFactory = new LoggerFactory();
        var logger = loggerFactory.CreateLogger("Test");

        loggerFactory.AddProvider(new CustomLoggerProvider("provider1", ThrowExceptionAt.None, store));

        // Act
        logger.LogInformation("Hello");
like image 83
Eilon Avatar answered Sep 29 '22 07:09

Eilon


Just a side note here, if you are using Visual Studio 2015 or lower, you might have problem installing Microsoft.Extensions.Logging Nuget package as this package require Nuget Version 4.3.0 or higher...

In order to install Microsoft.Extensions.Logging you need to install: https://dist.nuget.org/visualstudio-2015-vsix/v3.6.0/NuGet.Tools.vsix on Visual Studio 2015, or upgrade to Visual Studio 2017.

Also, Microsoft.Extensions.Logging does not install on .Net 4.5, you need .Net 4.6.1 or higher.

like image 36
Hooman Bahreini Avatar answered Sep 29 '22 07:09

Hooman Bahreini