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

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

使用NLog

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

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

nlog.config文件示例

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

<?xml version="1.0" encoding="utf-8"?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" internalLogLevel="Info">
<!-- 启用.net core的核心布局渲染器 -->
<extensions>
<add assembly="NLog.Web.AspNetCore" />
</extensions>
<!-- 写入日志的目标配置 archiveAboveSize="102400" maxArchiveDays="60" -->
<targets>
<!-- 调试 -->
<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}" />
<!-- 警告 -->
<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}" />
<!-- 错误 -->
<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}" />
<!-- 控制台 -->
<target xsi:type="Console" name="console" layout="${message}" />
</targets>
<!-- 映射规则 -->
<rules>
<!-- 调试 -->
<logger name="*" minlevel="Trace" maxlevel="Debug" writeTo="debug" />
<!--<logger name="*" minlevel="Trace" writeTo="console" />-->
<!-- 警告 -->
<logger name="*" minlevel="Info" maxlevel="Warn" writeTo="warn" />
<!-- 错误 -->
<logger name="*" minlevel="Error" maxlevel="Fatal" writeTo="error" />
<!--跳过不重要的微软日志-->
<logger name="Microsoft.*" maxlevel="Info" final="true" />
</rules>
</nlog>

第三步、代码中注入NLog

只需修改program.cs

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

四. 控制器里使用

/// <summary>
/// 日志
/// </summary>
private readonly ILogger<DemoController> _logger; /// <summary>
/// 构造函数
/// </summary>
/// <param name="logger"></param>
public DemoController(ILogger<DemoController> logger)
{
_logger = logger;
} public IActionResult Test()
{
_logger.LogError("我是日志内容");
return Ok("ok");
}

使用log4net

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

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

log4net.config文件内容示例

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

第三步、代码注入log4net

修改program.cs代码注入log4net

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((context, logBuilder) =>
{
logBuilder.AddFilter("System", LogLevel.Warning);
logBuilder.AddFilter("Microsoft", LogLevel.Warning);
logBuilder.AddLog4Net(); //注入log4net
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});

再修改startup.cs

public void Configure(IApplicationBuilder app, IWebHostEnvironment env , ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} // app.UseHttpsRedirection();
#region 添加log4net
loggerFactory.AddLog4Net();
#endregion app.UseRouting();
......
}
测试
[Route("api/[controller]")]
[ApiController]
public class TestLoggerController : ControllerBase
{
private readonly ILogger<TestLoggerController> _logger;
public TestLoggerController(ILogger<TestLoggerController> logger)
{
this._logger = logger;
} [HttpPost("testWriteLogException")]
public void TestWriteLogException()
{
_logger.LogError("这是一个简单日志测试"); }
}

 使用Serilog

添加 Nuget 引用

Serilog.AspNetCore日志包主体

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

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

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

级别由上自下依次降低

appsettings.json 中添加 Serilog 节点

{
"Serilog": {
"WriteTo": [
{
"Name": "RollingFile",
"Args": {
"pathFormat": "logs\\{Date}.txt",
"RestrictedToMinimumLevel": "Warning"
}
},
{
"Name": "Console"
}
],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Information",
"System": "Information"
}
}
},
}

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

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

修改 program.cs,注册 Serilog

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).UseSerilog((context, configure) =>
{
configure.ReadFrom.Configuration(context.Configuration);
});

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

private readonly ILogger<HomeController> _logger;

public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
} public IActionResult Index()
{
_logger.LogError("Error 测试");
return View();
}

更多详情

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

最新文章

  1. AWS的SysOps认证考试样题解析
  2. oracle sql 执行计划分析
  3. 【算法杂谈】Miller-Rabin素性测试算法
  4. grub2挂在iso镜像“ /dev/disk/by-label/XXXX error: boot device didn&#39;t show up after 30 seconds”问题
  5. linux(centos)用户与权限
  6. WPF数字输入框和IP地址输入框
  7. 过滤掉html 标签
  8. Windows:将cmd命令行添加到右键中方法
  9. PyCharm/WebStorm遇到Cannot start internal HTTP server
  10. 安卓电量优化之JobScheduler使用介绍
  11. The required anti-forgery form field &quot;__RequestVerificationToken&quot; is not present.
  12. 版本控制工具--svn和git的使用(三) -----git的使用(2)
  13. Struts中的找不到StringUtils异常
  14. Flask入门之Jinjia模板的一些语法
  15. supervisord supervisorctl 问题supervisor.sock refused connection
  16. webservice学习教程(三)--
  17. (后端)spring的@Transactional注解详细用法(转)
  18. redis-LinkedList
  19. 如何快速搭建&amp;配置本地服务器-前端技能
  20. js二叉树

热门文章

  1. 【mq读书笔记】消息拉取长轮训机制(Broker端)
  2. 【GDOI2014模拟】JZOJ2020年8月14日T2 网格
  3. 对称加密之---AES加密
  4. 老猿学5G:3GPP 5G规范中的URI资源概念
  5. bugku never give up
  6. python中的多线程和多进程
  7. Oracle函数:trunc、round、ceil和floor
  8. 6、Sping Cloud Feign
  9. Typora入门教程
  10. 终于不再对transition和animation,傻傻分不清楚了 --vue中使用transition和animation