首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用IServiceCollection和NLog将命名记录器通用ILogger<T>作为ILogger注入到构造函数中

使用IServiceCollection和NLog将命名记录器通用ILogger<T>作为ILogger注入到构造函数中的步骤如下:

  1. 首先,确保已经安装了NLog和NLog.Extensions.Logging NuGet包。
  2. 在Startup.cs文件中的ConfigureServices方法中,添加以下代码:
代码语言:txt
复制
using Microsoft.Extensions.Logging;
using NLog.Extensions.Logging;

public void ConfigureServices(IServiceCollection services)
{
    // 添加NLog日志记录器
    services.AddLogging(loggingBuilder =>
    {
        loggingBuilder.ClearProviders(); // 清除默认的日志记录器
        loggingBuilder.SetMinimumLevel(LogLevel.Trace); // 设置最小日志级别为Trace

        // 添加NLog日志记录器
        loggingBuilder.AddNLog();
    });

    // 注册其他服务
    services.AddTransient<MyService>(); // 假设有一个名为MyService的服务需要注入ILogger<T>
}
  1. 在需要注入ILogger<T>的类的构造函数中,添加ILogger<T>参数:
代码语言:txt
复制
using Microsoft.Extensions.Logging;

public class MyService
{
    private readonly ILogger<MyService> _logger;

    public MyService(ILogger<MyService> logger)
    {
        _logger = logger;
    }

    // ...
}
  1. 在NLog的配置文件(通常是NLog.config或NLog.xml)中,配置NLog的目标(例如文件、数据库等)和规则(例如日志级别、格式等)。
  2. 在应用程序的入口点(例如Program.cs文件的Main方法)中,添加以下代码以启用NLog:
代码语言:txt
复制
using Microsoft.Extensions.Logging;

public class Program
{
    public static void Main(string[] args)
    {
        // 创建NLog日志工厂
        var loggerFactory = LoggerFactory.Create(builder =>
        {
            builder.AddNLog(); // 添加NLog日志记录器
        });

        // 设置应用程序的默认日志工厂
        LoggerFactory.DefaultLoggerFactory = loggerFactory;

        // 启动应用程序
        // ...
    }
}

这样,当使用MyService类时,ILogger<MyService>将被自动注入,并且可以在类中使用_logger来记录日志。

NLog是一个功能强大且灵活的日志记录库,它支持多种目标和规则配置。它的优势包括:

  • 灵活的配置:NLog允许您通过配置文件或代码来配置日志记录目标和规则,以满足不同的需求。
  • 多种目标支持:NLog支持将日志记录到文件、数据库、网络、邮件等多种目标。
  • 强大的过滤和格式化:NLog提供了丰富的过滤和格式化选项,可以根据需要对日志进行筛选和格式化。
  • 高性能:NLog经过优化,具有较低的性能开销,适用于高并发和大规模应用程序。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云日志服务(CLS):https://cloud.tencent.com/product/cls
  • 腾讯云云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云移动开发(MPS):https://cloud.tencent.com/product/mps
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

.NET Core开发实战(第18课:日志框架:聊聊记日志的最佳姿势)--学习笔记(上)

3、Microsoft.Extensions.Logging.Debug 4、Microsoft.Extensions.Logging.TraceSource 代码通过一个控制台程序,展示从读取配置整个日志的记录器构造日志记录的过程...,注入对象 IServiceCollection serviceCollection = new ServiceCollection();// 构造容器 // 用工厂模式配置对象注册容器管理 //...注入的时候使用了一个委托,意味着容器可以帮我们管理这个对象的生命周期 serviceCollection.AddSingleton(p => config); // 如果实例直接注入...Console 的日志输出提供程序 }); AddLogging 源码 public static IServiceCollection AddLogging( this IServiceCollection...的对象,代表日志记录器 ILogger CreateLogger(string categoryName); // 这个方法通常不会用到它,因为通常情况下注册容器提供程序会在 AddLogging

61510

从头编写 asp.net core 2.0 web api 基础框架 (3)

看一下Constructor的代码,这种叫做Constructor注入。Constructor需要一个实现了ILogger接口的类的实例,不是一个具体的类,还是一个interface。...在asp.net core里面呢,Ioc依赖注入是框架内置的,这点老版本的asp.net web api 2.2不一样,那时候我们得使用像autofac这样的第三方库来实现Ioc依赖注入。...但是还有更好的方式,Container可以直接提供一个ILogger的实例,这时候呢Logger就会使用T的名字作为日志的类别: namespace CoreBackend.Api.Controllers...LogDebug窗口或者Console窗口还是比较方便的,但是正式生产环境这肯定不够用。 正式环境应该Log文件或者数据库。...对于Nlog的配置就不进行深入介绍了。具体请看官方文档的.net core那部分。 然后需要把Nlog集成asp.net core,也就是把Nlog注册ILoggerFactory里面。

1.6K70
  • ASP.NET Core 入门教程 10、ASP.NET Core 日志记录(NLog)入门

    一、前言 1、本教程主要内容 ASP.NET Core + 内置日志组件记录控制台日志 ASP.NET Core + NLog 按天记录本地日志 ASP.NET Core + NLog 日志按自定义LoggerName...ASP.NET Core内置日志组件,可以日志输出在控制台 1、应用程序启动时配置日志 修改Program.cs,在WebHostBuilder构建时配置日志 //需要引入的命名空间 using Microsoft.Extensions.Logging...修改HomeController.cs,通过构造函数注入ILogger //需要引入的命名空间 using Microsoft.Extensions.Logging; private readonly...> NLog配置文件一般主要包含两个部分,节点配置日志写入目标,节点配置匹配路由的规则。...创建Logger,并没有使用内置日志Microsoft.Extensions.Logging.ILogger的实例,所以可以自定义LoggerName,另外,我们在应用启动时配置的最低日志级别等也不会对这种方式生效

    1.6K20

    如何在 asp.net core 3.x 的 startup.cs 文件获取注入的服务

    ,趁着端午节假期,在改造模板时,发现没办法通过构造函数注入的形式在 Startup 文件中注入某些我需要的服务了,因此本篇文章主要介绍如何在 asp.net core 3.x 的 startup 文件获取注入的服务...,所以这里我需要将 ILogger IHttpContextAccessor 注入 Startup 类 /// /// 修改模型验证错误返回信息 /// ...你完全可以像在别的类采用构造函数注入的方式一样直接注入使用 public class Startup { /// /// 日志记录实例 /// </summary...,但是因为我们在 Startup 类通过构造函数注入的形式注入服务时,告诉程序了我需要这个服务的实例,从而导致在构建 WebHost 时存在了一个单独的容器,并且这个容器只包含了我们需要使用到的服务信息...Startup.ConfigureServices 方法执行完成后才会注册依赖注入容器,因此没办法像之前一样在根容器注册完成之前通过构造函数注入的形式使用 解决方案 如果你需要在 Startup.Configure

    2.1K30

    .NET Core下的日志(2):日志模型详解

    总的来说,LoggerProvider提供一个具体的Logger对象格式化的日志消息写入相应的目的地,但是我们在编程过程中使用的Logger对象则由LoggerFactory创建,这个Logger利用注册...上述这些扩展方法对此作了简化,它利用一个包含占位符的字符串模板(对应参数message)用于替换占位符的参数列表(对应参数args)来承载原始的日志消息,日志消息的格式化体现在如何使用提供的参数替换模板相应的占位符进而生成一个完整的消息...值得一提的是,定义在模板的占位符通过花括号括起来,可以使用零基连续整数(比如“{0}”、“{1}”“{2}”等),也可以使用任意字符串(比如“{Minimum}”“Maximum”等)。...如下面的代码片段所示,Logger的构造函数接受一个LoggerFactory作为输入参数,上述的这个内部封装的Logger对象就是由它创建的。...除了调用构造函数创建一个Logger对象之外,我们还可以调用针对ILoggerFactory接口的扩展方法CreateLogger来创建它。

    993100

    .NET Core开发实战(第18课:日志框架:聊聊记日志的最佳姿势)--学习笔记(下)

    18 | 日志框架:聊聊记日志的最佳姿势 除了使用 CreateLogger 指定 logger 的名称,实际上还可以借助容器来构造 logger,通常情况下我们会定义自己的类 namespace LoggingSimpleDemo...{ _logger.LogInformation("Show Time{time}", DateTime.Now); } } } 接着,...OrderService 注入容器 serviceCollection.AddTransient(); IServiceProvider service = serviceCollection.BuildServiceProvider...通常情况下并不会用 ILoggerFactory 来构造日志记录器,而是用强类型的这种依赖注入的方式来去管理我们的日志,也就是说用构造函数泛型的 ILogger 注入进来的方式 这样的方式有个好处就是我们不需要去为...logger 定义名字,它会默认将我们类型的名称作为记录器的名字,命名空间加上类名 LoggingSimpleDemo.OrderService ,那也就是可以在配置文件里面设置日志级别 "LoggingSimpleDemo.OrderService

    32920

    ASP.NET Core 依赖注入基本用法

    本文介绍依赖注入的基本概念,并结合代码演示如何在 ASP.NET Core中使用依赖注入。 什么是依赖注入?...也可以说,依赖被注入对象。 从百科的介绍可以看出,依赖注入控制反转是一回事,依赖注入是一种新的设计模式,通过正确使用依赖注入的相关技术,可以降低系统耦合度,增加系统的可扩展性。..., MyDependency>(); } } } 使用依赖注入 在了解了依赖注入的基本用法之后,我们现在来了解一下如何服务注入Controller、Views。...在控制器中注入服务 最常规的用法是采用构造函数注入的方式,一个服务注入控制器,代码如下: public class DefaultController : Controller { private...除此之外,还可以通过参数注入的方式,依赖项注入Action,这里使用到FromServices特性: public IActionResult Index([FromServices]ILogger

    2K20

    【ASP.NET Core 基础知识】--中间件--什么是中间件

    以下是自定义中间件的一般分类特点: 通用自定义中间件: 功能: 提供一般性的、可在多个应用程序重复使用的功能。 使用场景: 常见的通用功能,如日志记录、性能监控、请求计时等。...: 如果中间件需要访问其他服务或组件,可以通过构造函数参数注入它们。...>(Configuration.GetSection("MyMiddleware")); } 然后,在中间件类的构造函数注入配置选项。...以下是中间件参数配置的一般方式: 构造函数参数: 中间件的构造函数可以接受依赖项,例如日志记录器、配置服务、其他服务等。这些参数可以通过构造函数注入来获取。...创建中间件的步骤包括编写中间件类、注册中间件处理构造函数参数配置选项。在使用中间件时,应遵循最佳实践,确保良好的命名、单一职责、日志记录、错误处理、测试、版本控制和文档。

    63320

    .NET Core的日志:采用统一的模式记录日志

    关于日志记录的实现,我们有太多第三方框架可供选择,比如Log4Net、NLog、LoggrSerilog 等,当然我们还可以选择微软原生的诊断框架(相关API定义在命名空间“System.Diagnostics...目录 一、日志模型三要素 二、日志写入不同的目的地 三、采用依赖注入编程模式创建Logger 四、根据等级过滤日志消息 一、日志模型三要素 日志记录编程主要会涉及三个核心对象,它们分别是Logger...二、日志写入不同的目的地 接下来我们通过一个简单的实例来演示如何具有不同等级的日志写入两种不同的目的地,其中一种是直接格式化的日志消息输出到当前控制台,另一种则是日志写入Debug输出窗口(相当于直接调用...创建这两个LoggerProvider所调用的构造函数具有一个Func类型的参数,该委托对象的两个输入参数分别代表日志消息的类型等级,布尔类型的返回值决定了创建的...(nameof(Program)); 三、采用依赖注入编程模式创建Logger 在我们演示的实例,我们直接调用构造函数创建了一个LoggerFactory并利用它来创建用于记录日志的Logger,但是在一个

    1K60

    .Net Core 学习之路-AutoFac的使用

    本文不介绍IoCDI的概念,如果你对Ioc之前没有了解的话,建议先去搜索一下相关的资料 这篇文章简单介绍一下AutoFac的基本使用以及在asp .net core的应用 Autofac介绍 组件的三种注册方式...,将会取参数最多的那个构造函数进行实例化 builder.RegisterType(); //反射注册组件,手动指定构造函数,这里指定了调用 MyComponent(ILogger...log,IConfigReader config)的构造函数进行注册 builder.RegisterType() .UsingConstructor(typeof(ILogger...,实际上对于非单例的组件,从项目架构上来说,理论上应该是从构造函数注入进去的而不是手动解析。...的服务填充到了autofac中了,所以现在可以在任何位置通过AutoFac解析出来.net core默认注入的服务(IConfiguration,IHostingEnvironment等)了 正常项目使用

    1.6K70

    IOC --- 控制反转

    通常情况下,我们会使用构造函数注入」、「Setter方法注入」、「接口注入」等方式来实现依赖注入。...以构造函数注入为例,我们可以将对象所需要的依赖关系通过构造函数的参数传递进来,这样做的好处在于,我们可以在对象创建的时候就确定它所依赖的对象,从而避免了后续修改依赖关系的麻烦。...依赖项管理困难 如果没有使用IOC容器,那么需要手动管理依赖项的生命周期,包括创建、初始化销毁。这可能会使代码更加复杂,容易出错,也会导致代码可维护性的下降。 4....而使用IOC,可以依赖项的创建和管理交给IOC容器,从而避免代码重复 依赖注入的实现方式 依赖注入的实现方式有很多种,常见的有构造函数注入、Setter方法注入、接口注入等。 1....构造函数注入 构造函数注入是最常见的依赖注入方式,它可以将对象所需要的依赖关系通过构造函数的参数传递进来。

    19010

    ASP.NET Core 奇淫技巧之伪属性注入

    最直白的讲,我们在 ASP.NET Core ,想使用某个类型的时候可以不用自己去 new,可以由容器通过构造方法来注入具体的实现类型,而我们一般在构造方法上定义的依赖类型都是接口,而不是去依赖具体的实现...三.属性注入解决的痛点 以下介绍的痛点是我在实际编码过程遇到的一些,如果还有其他的,欢迎在评论和我交流 我所遇到的痛点,我归纳为三条: 1.减少常用的类型的重复注入代码,使构造方法看起来更为简洁...第一条: 以日志 ILogger 为例,我们在 Controller 或者 应用服务层(Application Service)等编写业务的地方可能会常用,那么我们可能会在大部分的 Controller...第二条: 在上面的Controller基类注入 ILogger,然后设置了 Logger 属性,这样子类就可以使用 Logger 属性来使用日志。...为 Application Service 实现伪属性注入 只是以 Application Service 来作为讲解,同理可举一反三其他地方。

    87320

    .NET Core下的日志(1):记录日志信息

    关于日志记录的实现,我们有太多第三方框架可供选择,比如Log4Net、NLog、LoggrSerilog 等,当然我们还可以选择微软原生的诊断机制(相关API定义在命名空间“System.Diagnostics...日志记录编程主要会涉及三个核心对象,它们分别是Logger、LoggerFactoryLoggerProvider,这三个对象同时也是.NET Core日志模型的核心对象,并通过相应的接口(ILogger...二、日志写入不同的目的地 接下来我们通过一个简单的实例来演示如何具有不同等级的日志写入两种不同的目的地,其中一种是直接格式化的日志消息输出到当前控制台,另一种则是日志写入Debug输出窗口(相当于直接调用...("App"); 三、依赖注入 在我们演示的实例,我们直接调用构造函数创建了一个LoggerFactory并利用它来创建用于记录日志的Logger,在一个.NET Core应用,LoggerFactory...会以依赖注入的方式注册ServiceProvider之中。

    1.1K70

    .NetCore 中使用Log4Net

    log4net 添加日志 NLog 使用 安装包:NLog.Web.AspNetCore 新建配置文件:nlog.config <?...配置文件信息简单概述: rules【规则】说明: 规则是logger具有以下属性的元素: name - 记录器名称过滤器 - 可能包含通配符(*?)...在NLog 4.6.4引入 注意:虽然命名了规则logger,但它没有定义记录器。它引用一个或多个记录器。 通过规则name模式与记录器名称匹配,规则映射到记录器。...规则name属性可以包括通配符(*?),以通过通配符匹配来匹配记录器名称。 * - 匹配0个或更多字符 ? - 恰好匹配1个字符 targets【目标】: 每个目标由一个target元素表示。...使用名称空间时,此属性已命名xsi:type。 除了这些属性之外,目标通常还接受其他参数,这些参数会影响诊断跟踪的写入方式。

    90010

    Asp.Net Core Filter 深入浅出的那些事-AOP

    AOP技术利用一种称为“横切”的技术,剖解开封装对象的内部,影响多个类的公共行为封装到一个可重用的模块,并将其命名为Aspect切面。...> _logger; //构造注入日志组件 public ExecptionFilter(ILogger logger)...异常"); } } 从上面的代码可以发现 ExceptionFilter 过滤器实现存在日志服务的构造函数注入,也就是说该过滤器依赖于其他的日志服务,但是日志服务都是通过...DI 注入进来的;再来回顾下上面Action 注册方式或者Controller 注册方式 也即Attribute 特性标注注册方式,本身基础的特性是不支持构造函数的,是在运行时注册进来的,那要解决这种本身需要对服务依赖的过滤器需要使用...)] public IActionFilter Index2() { return View(); } 通过上面的代码可以发现AuthonizationFilter 是默认的构造器,但是如果过滤器构造函数存在参数

    50320

    一起学习设计模式--03.工厂方法模式

    如何封装记录器的初始化过程并保证多种记录器切换的灵活性是A科技公司开发人员面临的一个难题。...比如:需要初始化其它相关的类,还有可能需要配置工作环境(如连接数据库或创建文件),导致代码较长,如果将他们都写在构造函数,会导致构造函数庞大,不利于代码的修改维护。...在客户端代码中将不再使用 new 关键字来创建工厂对象,而是具体工厂类的类名存储在配置文件(比如XML),通过读取配置文件获取工厂类的类名字符串,然后再借助 .NET 的反射机制,根据类名字符串生成对象...由于考虑系统的可扩展性,需要引入抽象层,在客户端代码使用抽象层进行定义,增加了系统的抽象性理解难度,且在实现时可能需要用到DOM、反射等技术,增加了系统的实现难度。...在工厂方法模式,抽象工厂类只需要提供一个创建产品的接口,而由其子类来确定具体要创建的对象,利用面向对象的多态性里氏替换原则,在程序运行时,子类对象覆盖父类对象,从而使得系统更容易扩展。

    43620

    dotnet 通过依赖注入的 Scoped 给工作流注入相同的上下文信息

    尽管本文使用 Scoped 仅作为日志记录的功能没能发挥强大的日志库的作为,但是减弱日志库是为了提升 DependencyInjection 的强大,因此请小伙伴仅认为日志库输出文本控制台之间没有任何差别...foo 不是相同的对象 var foo2 = serviceScope.ServiceProvider.GetService(); } 因此假设各个步骤加上步骤需要的上下文信息类都作为...Scoped 范围注入,那么此时在一次任务过程,任务使用的步骤都在一个 Scoped 里面,如果此时的任务使用相同的类型的上下文信息类,那么此上下文信息将会是相同的对象。...,默认控制器就是注册为 Scoped 的,因此在控制器里面无论是构造注入或者是使用容器获取都是在相同的 Scoped 里面 上面代码是 F1 步骤引用 F2 步骤,咱在构造 F1 注入。...接着在 F1 F3 注入这个类,此时使用的对象就是相同的对象,因此参数也就能传递 有趣的是这个方法改动仅仅只是 F1 F3 两个类加上依赖注入构造,其他模块可以不动 本文代码放在 github

    50410

    .NET CORE——Console中使用依赖注入

    我们都知道,在 ASP.NET CORE 通过依赖注入的方式来使用服务十分的简单,而在 Console ,其实也只是稍微绕了个小弯子而已。...本文将在别给出内置组件第三方组件(主要是Autofac)在 Console 应用程序的依赖注入实现方式。 1....在 Console 中使用内置 DI 组件 网上已经有几篇相关的博客讲解 Console 的依赖注入,链接都会附于文章末尾。...} 我们手动创建 serviceProvider 的过程其实就是 ASP.NET CORE 执行 ConfigureServices 方法的过程,同样的,上述代码也展示了手动解析 Logger 实例通过构造函数注入解析...预先注入内置 DI 使用 Populate 方法迁移 containerBuilder.RegisterType().As<ICounterAppService

    1K100
    领券