Serilog中的结构化日志支持非常好,而且配置简便。我能够比其他任何人更轻松地启动和运行Seirlog。Serilog中的日志可以发送到很多目的地。Serilog称这些东西为“接收器”

在大多数情况下,Serilog的延迟是NLog的延迟的一半,吞吐量是其两倍。测试链接

使用NLog

第一步,项目中引入NLog.Web.AspNetCore

第二步、创建nlog.config文件(详细的配置说明请参照NLog官方文档),配置好日志参数。并将改文件设置成【始终复制】或者【如果较新则复制】

nlog.config文件示例

具体的配置说明 可以参考 https://www.cjavapy.com/article/183/

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" internalLogLevel="Info">
  3. <!-- 启用.net core的核心布局渲染器 -->
  4. <extensions>
  5. <add assembly="NLog.Web.AspNetCore" />
  6. </extensions>
  7. <!-- 写入日志的目标配置 archiveAboveSize="102400" maxArchiveDays="60" -->
  8. <targets>
  9. <!-- 调试 -->
  10. <target xsi:type="File" name="debug" fileName="../logs/debug-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
  11. <!-- 警告 -->
  12. <target xsi:type="File" name="warn" fileName="../logs/warn-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
  13. <!-- 错误 -->
  14. <target xsi:type="File" name="error" fileName="../logs/error-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
  15. <!-- 控制台 -->
  16. <target xsi:type="Console" name="console" layout="${message}" />
  17. </targets>
  18. <!-- 映射规则 -->
  19. <rules>
  20. <!-- 调试 -->
  21. <logger name="*" minlevel="Trace" maxlevel="Debug" writeTo="debug" />
  22. <!--<logger name="*" minlevel="Trace" writeTo="console" />-->
  23. <!-- 警告 -->
  24. <logger name="*" minlevel="Info" maxlevel="Warn" writeTo="warn" />
  25. <!-- 错误 -->
  26. <logger name="*" minlevel="Error" maxlevel="Fatal" writeTo="error" />
  27. <!--跳过不重要的微软日志-->
  28. <logger name="Microsoft.*" maxlevel="Info" final="true" />
  29. </rules>
  30. </nlog>

第三步、代码中注入NLog

只需修改program.cs

  1. public static IHostBuilder CreateHostBuilder(string[] args) =>
  2. Host.CreateDefaultBuilder(args)
  3. .ConfigureWebHostDefaults(webBuilder =>
  4. {
  5. webBuilder.UseStartup<Startup>();
  6. }).UseNLog();// 注入nlog

四. 控制器里使用

  1. /// <summary>
  2. /// 日志
  3. /// </summary>
  4. private readonly ILogger<DemoController> _logger;
  5.  
  6. /// <summary>
  7. /// 构造函数
  8. /// </summary>
  9. /// <param name="logger"></param>
  10. public DemoController(ILogger<DemoController> logger)
  11. {
  12. _logger = logger;
  13. }
  14.  
  15. public IActionResult Test()
  16. {
  17. _logger.LogError("我是日志内容");
  18. return Ok("ok");
  19. }

使用log4net

第一步、在对应项目中引入Microsoft.Extensions.Logging.Log4Net.AspNetCore

第二步、创建log4net.config文件(详细的配置说明请参照其官方文档),配置好日志参数。并将改文件设置成【始终复制】或者【如果较新则复制】

log4net.config文件内容示例

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <log4net>
  3. <!-- Define some output appenders -->
  4. <appender name="rollingAppender" type="log4net.Appender.RollingFileAppender">
  5. <file value="log\log.txt" />
  6. <!--追加日志内容-->
  7. <appendToFile value="true" />
  8. <!--防止多线程时不能写Log,官方说线程非安全-->
  9. <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  10. <!--可以为:Once|Size|Date|Composite-->
  11. <!--Composite为Size和Date的组合-->
  12. <rollingStyle value="Composite" />
  13. <!--当备份文件时,为文件名加的后缀-->
  14. <datePattern value="yyyyMMdd.txt" />
  15. <!--日志最大个数,都是最新的-->
  16. <!--rollingStyle节点为Size时,只能有value个日志-->
  17. <!--rollingStyle节点为Composite时,每天有value个日志-->
  18. <maxSizeRollBackups value="20" />
  19. <!--可用的单位:KB|MB|GB-->
  20. <maximumFileSize value="5MB" />
  21. <!--置为true,当前最新日志文件名永远为file节中的名字-->
  22. <staticLogFileName value="true" />
  23. <!--输出级别在INFO和ERROR之间的日志-->
  24. <!--过滤级别 FATAL > ERROR > WARN > INFO > DEBUG-->
  25. <filter type="log4net.Filter.LevelRangeFilter">
  26. <param name="LevelMin" value="WARN" />
  27. <param name="LevelMax" value="FATAL" />
  28. </filter>
  29. <layout type="log4net.Layout.PatternLayout">
  30. <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
  31. </layout>
  32. </appender>
  33. <root>
  34. <priority value="ALL"/>
  35. <level value="ALL"/>
  36. <appender-ref ref="rollingAppender" />
  37. </root>
  38. </log4net>

第三步、代码注入log4net

修改program.cs代码注入log4net

  1. public static IHostBuilder CreateHostBuilder(string[] args) =>
  2. Host.CreateDefaultBuilder(args)
  3. .ConfigureLogging((context, logBuilder) =>
  4. {
  5. logBuilder.AddFilter("System", LogLevel.Warning);
  6. logBuilder.AddFilter("Microsoft", LogLevel.Warning);
  7. logBuilder.AddLog4Net(); //注入log4net
  8. })
  9. .ConfigureWebHostDefaults(webBuilder =>
  10. {
  11. webBuilder.UseStartup<Startup>();
  12. });

再修改startup.cs

  1. public void Configure(IApplicationBuilder app, IWebHostEnvironment env , ILoggerFactory loggerFactory)
  2. {
  3. if (env.IsDevelopment())
  4. {
  5. app.UseDeveloperExceptionPage();
  6. }
  7.  
  8. // app.UseHttpsRedirection();
  9. #region 添加log4net
  10. loggerFactory.AddLog4Net();
  11. #endregion
  12.  
  13. app.UseRouting();
  14. ......
  15. }
  1. 测试
  1. [Route("api/[controller]")]
  2. [ApiController]
  3. public class TestLoggerController : ControllerBase
  4. {
  5. private readonly ILogger<TestLoggerController> _logger;
  6. public TestLoggerController(ILogger<TestLoggerController> logger)
  7. {
  8. this._logger = logger;
  9. }
  10.  
  11. [HttpPost("testWriteLogException")]
  12. public void TestWriteLogException()
  13. {
  14. _logger.LogError("这是一个简单日志测试");
  15.  
  16. }
  17. }

 使用Serilog

添加 Nuget 引用

Serilog.AspNetCore日志包主体

Serilog.Sinks.RollingFile 将日志写入文件

日志记录器的四种级别(Log4j)的要求

  • error   错误信息(较严重)
  • warn   警告级别的信息(不严重)
  • info     需要持续输出的信息(无论调试还是发布状态)
  • debug 需要在调试过程中输出的信息,但发布后是不需要的(当然发布后,也是看不到的)

级别由上自下依次降低

appsettings.json 中添加 Serilog 节点

  1. {
  2. "Serilog": {
  3. "WriteTo": [
  4. {
  5. "Name": "RollingFile",
  6. "Args": {
  7. "pathFormat": "logs\\{Date}.txt",
  8. "RestrictedToMinimumLevel": "Warning"
  9. }
  10. },
  11. {
  12. "Name": "Console"
  13. }
  14. ],
  15. "MinimumLevel": {
  16. "Default": "Debug",
  17. "Override": {
  18. "Microsoft": "Information",
  19. "System": "Information"
  20. }
  21. }
  22. },
  23. }

简单说明下配置文件的意思:

  • 将日志写入RollingFile(文件)和Console(控制台)。
  • RollingFile 的具体配置:记录文件到 根目录/logs/{日期}.txt 文件内,每天记录一个文件,并且只记录 Warning 及其以上的日志;
  • 默认日志级别记录 Debug 及其以上的日志。
  • 如果日志包含 Microsoft System ,只记录级别为 Information 及以上的日志。

修改 program.cs,注册 Serilog

  1. public static IHostBuilder CreateHostBuilder(string[] args) =>
  2. Host.CreateDefaultBuilder(args)
  3. .ConfigureWebHostDefaults(webBuilder =>
  4. {
  5. webBuilder.UseStartup<Startup>();
  6. }).UseSerilog((context, configure) =>
  7. {
  8. configure.ReadFrom.Configuration(context.Configuration);
  9. });

简单配置完成,现在可以在项目中方便的使用 Serilog 了。

  1. private readonly ILogger<HomeController> _logger;
  2.  
  3. public HomeController(ILogger<HomeController> logger)
  4. {
  5. _logger = logger;
  6. }
  7.  
  8. public IActionResult Index()
  9. {
  10. _logger.LogError("Error 测试");
  11. return View();
  12. }

更多详情

https://www.cnblogs.com/diwu0510/p/12828519.html

ASP.NET Core 3.1使用log4net/nlog/Serilog记录日志的更多相关文章

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

    一.新建ASP.NET Core 2.0 MVC项目,使用NuGet在浏览中搜索:NLog.Web.AspNetCore,如下图所示: 二.在项目的根目录下新建一个xml类型的nlog.config文 ...

  2. Asp.Net Core 开发之旅之NLog日志

    NLog已是日志库的一员大佬,使用也简单方便,本文介绍的环境是居于.NET CORE 3.0 1.安装 Install-Package NLog.Web.AspNetCore 2.创建配置文件 在we ...

  3. ASP.NET Core 2.0使用Log4net实现记录日志功能

    一.安装Log4net 1.使用Nuget包进行安装 在依赖项上面右键,选择“管理NuGet程序包”,如下图所示: 在浏览界面输入log4net,然后点击安装,如下图所示: 2.使用程序包管理器控制台 ...

  4. 在asp.net web api 2 (ioc autofac) 使用 Serilog 记录日志

    Serilog是.net里面非常不错的记录日志的库,另外一个我认为比较好的Log库是NLog. 在我个人的asp.net web api 2 基础框架(Github地址)里,我原来使用的是NLog,但 ...

  5. ASP.NET Core:ASP.NET Core中使用NLog记录日志

    一.前言 在所有的应用程序中,日志功能是不可或缺的模块,我们可以根据日志信息进行调试.查看产生的错误信息,在ASP.NET Core中我们可以使用log4net或者NLog日志组件来实现记录日志的功能 ...

  6. asp.net core 使用NLog记录日志到txt文件

    一.使用VisualStudioCode创建一个webapi项目(也可以是mvc等).一个类库(用于封装记录日志方法,当然如果使用依赖注入到控制台项目,就不需要此类库了). 二.在类库中添加NLog. ...

  7. ASP.NET Core 添加NLog日志支持(VS2015update3&VS2017)

    1.创建一个新的ASP.NET Core项目 2.添加项目依赖 NLog.Web.AspNetCore 3.在项目目录下添加nlog.config文件: <?xml version=" ...

  8. [转]Setting the NLog database connection string in the ASP.NET Core appsettings.json

    本文转自:https://damienbod.com/2016/09/22/setting-the-nlog-database-connection-string-in-the-asp-net-cor ...

  9. Asp.Net Core 进阶(二) —— 集成Log4net

    Asp.Net Core 支持适用于各种内置日志记录API,同时也支持其他第三方日志记录.在我们新建项目后,在Program 文件入口调用了CreateDefaultBuilder,该操作默认将添加以 ...

随机推荐

  1. php form表单提交时,action url中参数无效的解决方法

    表单提交时get方式的一个错误 <form class="form-inline pull-right" method="get" action=&quo ...

  2. Contest 1445

    A \(a\) 中第 \(i\) 小的配 \(b\) 中第 \(i\) 大的. 限制相同,这样配最平均. 时间复杂度 \(O\left(tn\log n\right)\). B 最终的一百名至少是第一 ...

  3. Contest 1435

    A \(x\times-y+y\times x=0\),因为 \(n\) 是偶数,所以两两这样构造即可. 时间复杂度 \(O\left(Tn\right)\). B 有点绕的题,要理清思路. 发现行和 ...

  4. Windows操作系统深入解析原理

    Windows运用程序编写插口(API)是对于Windows电脑操作系统大家族的客户方式系统软件程序编写插口.在32位版本号的Windows营销推广之前,31位版本号Windows电脑操作系统的程序编 ...

  5. 程序媛数据报告:近三年增长至70%,平均月薪1.54W,女性程序媛并不是特殊物种

  6. mysql 数据文件

    mysql8.0取消了frm文件 . ibd数据和索引

  7. CSS色调旋转滤镜

    一 关于filter 首先看一下官方对于CSS的filter属性的定义: CSS属性将模糊或颜色偏移等图形效果应用于元素.滤镜通常用于调整图像,背景和边框的渲染. 本文主要讲的是filter中的一个属 ...

  8. Qt实现客户端与服务器消息发送与文件传输

    Qt实现客户端与服务器消息发送与文件传输需要使用到 QTcpSocket:提供套接字QTcpServer:提供基于TCP的服务端,官方文档的解释如下: This class makes it poss ...

  9. 整理一下《java并发编程实战》中的知识点

    分工.同步.互斥的历史由来 分工:单道.多道.分时 同步:线程通信(组织编排任务) 互斥:因(多线程访问共享资源)果(串行化共享资源的访问) 1切都是为了提高性能 2.可见性.原子性.有序性 可见性: ...

  10. JMeter断言/检查点

    断言就类似LoadRunner中的检查点.对上一个请求返回的信息,获取部分字符串.图片等做判断,确保返回的信息的准确性. 右键点击"HTTP请求" -> "添加&q ...