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

.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

64810

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

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

1.6K70
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

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

    2.2K30

    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

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

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

    1K100

    .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

    33520

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

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

    2.1K20

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

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

    87520

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

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

    1K60

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

    本文不介绍IoC和DI的概念,如果你对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....构造函数注入 构造函数注入是最常见的依赖注入方式,它可以将对象所需要的依赖关系通过构造函数的参数传递进来。

    20310

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

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

    90020

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

    关于日志记录的实现,我们有太多第三方框架可供选择,比如Log4Net、NLog、Loggr和Serilog 等,当然我们还可以选择微软原生的诊断机制(相关API定义在命名空间“System.Diagnostics...日志记录编程主要会涉及到三个核心对象,它们分别是Logger、LoggerFactory和LoggerProvider,这三个对象同时也是.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。 除了这些属性之外,目标通常还接受其他参数,这些参数会影响诊断跟踪的写入方式。

    92110

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

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

    52520

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

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

    44220

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

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

    53710

    .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

    2.1K30
    领券