我可以在ASP.NET MVC 5(不是mvc核心)项目中使用ILoggerFactory吗?

时间:2017-10-18 06:10:39

标签: asp.net-mvc logging asp.net-mvc-5 asp.net-core-mvc

我想在我的asp.net MVC 5项目中创建一个日志框架。我的Startup类看起来像这样:

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

但是,当我查看ASP.Net MVC Core项目时,Startup类是这样的:

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

是否可以在MVC 5中包含ILoggerFactory?如果可以,我应该如何初始化/注册它?是否需要在global.asax或Startup中完成?

2 个答案:

答案 0 :(得分:7)

所有Microsoft.Extensions.*类型(包括Logging系统)都可以在ASP.NET Core之外使用。实际上,它们在Entity Framework Core中使用,它不是ASP.NET Core的一部分。

要在任何应用中使用它,只需new向上使用您需要使用的类型并开始调用它们 - 它没有任何神奇之处。当然,因为它不在ASP.NET核心应用程序中,所以你不会得到自动依赖注入(DI)(因为ASP.NET核心就是连线)。

在这种情况下,最简单的方法是直接使用LoggerFactory以及来自该版本的所有API。

事实上,如果您查看Logging中许多类型的单元测试,它们的模式与不使用DI时的模式类似:

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

该代码创建一个记录器工厂,添加一个记录器提供程序(您可以使用Console,EventLog,自定义等),然后将一条信息消息记录到它:

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

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

        // Act
        logger.LogInformation("Hello");

答案 1 :(得分:3)

请注意,如果您使用的是Visual Studio 2015或更低版本,则可能在安装Microsoft.Extensions.Logging Nuget软件包时遇到问题,因为此软件包需要Nuget Version 4.3.0或更高版本...

要安装Microsoft.Extensions.Logging,您需要在Visual Studio 2015上安装:https://dist.nuget.org/visualstudio-2015-vsix/v3.6.0/NuGet.Tools.vsix,或升级到Visual Studio 2017。

此外,Microsoft.Extensions.Logging无法安装在.Net 4.5上,您需要.Net 4.6.1或更高版本。