把旧系统迁移到.Net Core 2.0 日记(2) - 依赖注入/日志NLog

转载 2018年04月17日 00:00:00

Net Core 大量使用依赖注入(Dependency Inject), 打个比方,我们常用的日志组件有Log4Net,NLog等等.

如果我们要随时替换日志组件,那么代码中就不能直接引用某个组件的内容,也不能直接New 某个组件.

而是应该定义一组接口, 然后包装各个组件,实现这个接口. Net Core 自带组件容器, 启动程序时,指定接口对应的实现.

然后在各个页面/Controller 里, 通过构造函数的参数,把要带过去的接口,把容器里的对象自动传过去( 我还不知道是怎么实现的)

各个页面/Controller ,再调用接口的方法. 所谓的面向接口编程.

640?wx_fmt=png&wxfrom=5&wx_lazy=1

Net Core 在Microsoft.Extension.Logging定义了ILogger,ILoggerFactory,ILoggerProvider 这几个接口, 日志组件实现这个接口就可以被调用了.

上网查了一下,NLog已经实现了这些接口了,你用Nuget找NLog.Web.AspNetCore 就已经包装好了. 具体文档,请看这篇文章,非常详细.

https://github.com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-2

我们来看一下代码, 要调用NLog, 在Program.cs里

public static IWebHost BuildWebHost(string[] args) =>

            WebHost.CreateDefaultBuilder(args)

                .UseStartup<Startup>()

                   .ConfigureLogging((hostingContext, logging) =>

                   {

                       logging.AddConsole();

                       logging.AddDebug();

                   })

                   .UseNLog()

                .Build();

    }

调用NLog写Log

public class HelloMiddleware

    {

        private readonly ILogger<HelloMiddleware> _logger;

        private readonly RequestDelegate _next;


        public HelloMiddleware(RequestDelegate next,ILogger<HelloMiddleware> logger)

        {

            _next = next;

            _logger = logger;

        }


        public Task Invoke(HttpContext httpContext)

        {

            httpContext.Response.WriteAsync("Hello in Class Invoke"+ Environment.NewLine);

            _logger.LogInformation("******hello middleware*********");

            return _next(httpContext);

        }

    }


我们来看看UseNLog()这个方法的代码,看看做了什么

/// <summary>

        /// Use NLog for Dependency Injected loggers. 

        /// </summary>

        public static IWebHostBuilder UseNLog(this IWebHostBuilder builder)

        {

            return UseNLog(builder, null);

        }


        /// <summary>

        /// Use NLog for Dependency Injected loggers. 

        /// </summary>

        /// <param name="builder"></param>

        /// <param name="options">Options for logging to NLog with Dependency Injected loggers</param>

        /// <returns></returns>

        public static IWebHostBuilder UseNLog(this IWebHostBuilder builder, NLogAspNetCoreOptions options)

        {

            if (builder == null) throw new ArgumentNullException(nameof(builder));

            options = options ?? NLogAspNetCoreOptions.Default;


            builder.ConfigureServices(services =>

            {

                //note: when registering ILoggerFactory, all non NLog stuff and stuff before this will be removed

                services.AddSingleton<ILoggerProvider>(serviceProvider =>

                {

                    ServiceLocator.ServiceProvider = serviceProvider;

                    return new NLogLoggerProvider(options);

                });


                //note: this one is called before  services.AddSingleton<ILoggerFactory>

                if (options.RegisterHttpContextAccessor)

                {

                    services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

                }


                RegisterHiddenAssembliesForCallSite();

            });

            return builder;

        }

而Log4Net 就没有官方的包装,只有一个第三方包装的, 但包装的不好, 日志的配置不是放在Program.cs, 而是放在StartUp.cs. 我打算有时间再重新包装一次.

参考这篇文章

http://www.cnblogs.com/drivenwinder/p/8300881.html

相关文章:

原文地址 http://www.cnblogs.com/zitjubiz/p/net_core_daily_2.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

Net Core使用日志 NLog

一:使用Nuget执行命令下载NLog相关依赖                    Install-Package NLog.Extensions.Logging -Pre           ...
  • aojiancc2
  • aojiancc2
  • 2017-07-10 15:29:05
  • 2828

.net framework 迁移至.net core2.0专题

度量.net framework 迁移到.net core的工作量(转) 1 度量.net framework 迁移到.net core的工作量 2 迁移.net framework 工程到.net ...
  • huwei2003
  • huwei2003
  • 2017-09-29 17:22:55
  • 705

ASP.NET Core 2.0系列学习笔记-NLog日志配置文件

一、新建ASP.NET Core 2.0 MVC项目,使用NuGet在浏览中搜索:NLog.Web.AspNetCore,如下图所示:二、在项目的bin\Debug\netcoreapp2.0\下新建...
  • ChaITSimpleLove
  • ChaITSimpleLove
  • 2018-02-27 20:49:29
  • 242

Asp.Net Core 2.0 之旅---NLog日志的使用教程

1、安装NLog,搜索 NLog.Web.AspNetCore,并将它安装在web项目中。 2、配置NLog,在StartUpzz启动类中的 Configure 方法中 配置NLog 3、...
  • huanghuangtongxue
  • huanghuangtongxue
  • 2018-01-17 13:14:51
  • 520

ASP.NET Core 开发-Logging 使用NLog 写日志文件

ASP.NET Core 开发-Logging 使用NLog 写日志文件。 NLog 可以适用于 .NET Core 和 ASP.NET Core 。 ASP.NET Core已经内置了日...
  • merry3688
  • merry3688
  • 2016-07-29 14:00:05
  • 4522

在 Asp.net core 2.0 的Web Api 添加logging

我们已经熟悉在ASP.NET CORE项目中添加NLog去记录我们的日志。但方法移到web API中行不通。我简历记录下我加的方法。     1. Nuget 加 NLog.Web.AspNetCo...
  • xbqiao
  • xbqiao
  • 2017-11-02 17:33:40
  • 481

ASP.NET Core 和 NLog 集成

将 ASP.NET Core 提供的默认日志提供程序替换成 NLog。步骤 1在ASP.NET Core的启动类Startup的Configure(IApplicationBuilder app, I...
  • cheer_cheer
  • cheer_cheer
  • 2016-07-18 23:26:51
  • 3064

.net core日志 NLog.Extensions.Logging

https://github.com/NLog/NLog.Extensions.Logging
  • qq289523052
  • qq289523052
  • 2017-01-13 14:41:05
  • 986

ASP.NET Core 2.0 依赖注入

问题 如何使用 ASP.NET Core 服务容器进行依赖注入? 答案 创建一个服务 public interface IGreetingService {    string G...
  • sD7O95O
  • sD7O95O
  • 2017-10-27 00:00:00
  • 830

在Visual Studio中将现有.NET Framework项目迁移至.NET Core 1.1 Preview 1

1)下载安装包含 .NET Core 1.1 Preview 1 的 SDK:Windows x64 安装包(下载地址列表) 2)下载最新 VS 2015 NuGet 插件:https://di...
  • NCTU_to_prove_safety
  • NCTU_to_prove_safety
  • 2017-08-04 10:43:46
  • 245
收藏助手
不良信息举报
您举报文章:把旧系统迁移到.Net Core 2.0 日记(2) - 依赖注入/日志NLog
举报原因:
原因补充:

(最多只允许输入30个字)