首页 > 其他分享 >netcore日志

netcore日志

时间:2023-02-07 22:46:20浏览次数:44  
标签:logger netcore Serilog NLog ILogger 日志 public

1.日志信息源

ILogging

ILogging

//nuget包
Microsoft.Extensions.Logging
Microsoft.Extensions.Logging.Console
//控制器
public class WeatherForecastController : ControllerBase
{
  private readonly ILogger<string> _logger;

  public WeatherForecastController(ILogger<string> logger)
  {
    	_logger = logger;
  }   
  public void ILogger() 
  {
       //_logger.LogInformation("f");
        _logger.LogDebug("连接数据库成功");
        _logger.LogDebug("开始查找数据");
        _logger.LogWarning("查找失败..重试第一次");
        _logger.LogWarning("查找失败..重试第二次");
        _logger.LogError("失败");
       // _logger.LogCritical("byby");               
    		try
        {
             System.IO.File.ReadAllText("G:/f.txt");
        }
        catch (Exception ex)
        {
             _logger.LogError(ex,"异常对象");
             _logger.LogWarning(ex, "异常对象");
        }
	 }
  
}






//ILogger<WeatherForecastController> T为一个引用类型的对象如string等,int不行,一般写当前类名,会出现在日志中方便定位

//并且已经自动添加了服务,无需自己再写,框架中已经写好并在Program的Host.CreateDefaultBuilder(args)引用appsettings.Development.json文件启动。并且再写也不会生效,会被框架覆盖,无法设置最小输出水平
services.AddLogging(logbuilder => {
   logbuilder.AddConsole();
   logbuilder.SetMinimumLevel(LogLevel.Debug);
});
//所以输出水平只能由appsettings.Development.json文件决定
{
  "Logging": {
    "LogLevel": {
      "Default": "Information", //修改为Debug即可
      "Microsoft": "Warning",   //Microsoft指的是类的命名空间
      "Microsoft.Hosting.Lifetime": "Information"
    }
  }
}

//不仅可以输出文字,还可以输出异常对象和描述
_logger.LogError(ex, "异常对象");

//可以配合logBuilder.AddEventLog()使用实现输入到本机windows事件查看器上

2.日志处理

Nlog
Serilog

Nlog

//nuget包
NLog.Extensions.Logging
//Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    services.AddLogging(logbuilder => {
      logbuilder.AddNLog();
    });
}
//创建nlog.config文件(https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-5)
<?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"
      internalLogFile="internal-nlog-AspNetCore.txt">
      .......
      .......
</nlog>
//控制器
public class WeatherForecastController : ControllerBase
{
  private readonly ILogger<string> _logger;

  public WeatherForecastController(ILogger<string> logger)
  {
    	_logger = logger;
  }   
  public void ILogger() 
  {
       //_logger.LogInformation("f");
        _logger.LogDebug("连接数据库成功");
        _logger.LogDebug("开始查找数据");
        _logger.LogWarning("查找失败..重试第一次");
        _logger.LogWarning("查找失败..重试第二次");
        _logger.LogError("失败");
       // _logger.LogCritical("byby");               
    		try
        {
             System.IO.File.ReadAllText("G:/f.txt");
        }
        catch (Exception ex)
        {
             _logger.LogError(ex,"异常对象");
             _logger.LogWarning(ex, "异常对象");
        }
	 }
  
}

        

  
  

// 需要安装nuget包NLog.Extensions.Logging
// 新建nlog.config文件看官网https://github.com/dotnet/aspnetcore/issues/27307

// nlog.config中会通过
// target:定义日志输出到哪个日志txt文本, 它的layout指定该文本的内容模板,archiveAboveSize指定每个文件的大小,maxArchiveFiles指定这个类型的文本最多同时存在几份
// rules:匹配每个日志文本中每条日志的格式规则,它的name指的是被记录日志的类的namespace+类名,minlevel指的是日志级别,writeTo指的是记录到哪个日志txt文本中,final指的是是否继续往下匹配


// target中的lifetimeConsole就是指往控制台输出,由于正常启动就已经会在控制台输出,所以使用了这个将在控制台看到两份输出
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://localhost:5000

Serilog

//nuget包
Serilog.AspNetCore
//Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    services.AddLogging(logbuilder => {
       Serilog.Log.Logger = new LoggerConfiguration()
       .MinimumLevel.Debug()
       .MinimumLevel.Override("Microsoft", LogEventLevel.Information)// 日志调用类命名空间如果以 Microsoft 开头,覆盖日志输出最小级别为 Information,像是重写方法
       .WriteTo.Console(new JsonFormatter()) //json格式
       .WriteTo.File(Path.Combine(@"..\LogFiles\log.txt"), rollingInterval: RollingInterval.Day) //配置日志输出到文件,文件输出到LogFiles\log.txt中并且日记的生成周期为每天
       .WriteTo.Exceptionless()//输出日志到Exceptionless对其进行集中化管理
       .CreateLogger();
      
        logbuilder.AddSerilog();
    });
}
//控制器
public class WeatherForecastController : ControllerBase
{
  private readonly ILogger<string> _logger;

  public WeatherForecastController(ILogger<string> logger)
  {
    	_logger = logger;
  }   
  public void ILogger() 
  {
        User user = new User { Name = "admin", Email = "111qq.com" };
        _logger.LogDebug("注册一个用户{@persopn}",user);
        _logger.LogDebug("用户名:" + user.Name, "邮箱:" + user.Email);
	 }
}





https://gitee.com/zhang-yifei2020/class-2-web-api-class-notes/blob/master/%E5%BC%A0%E7%9B%8A%E9%A3%9E/2022-6-06-serilog%E6%97%A5%E5%BF%97%E5%92%8C%E8%AF%B7%E6%B1%82%E4%BC%A0%E5%8F%82%E8%A1%A5%E5%85%85/serilog%E6%97%A5%E5%BF%97.md
https://zhuanlan.zhihu.com/p/263815555
https://blog.csdn.net/Upgrader/article/details/88323907

3.各自优缺

# ILogging是NLog和Serilog的信息源,先由ILogging获取日志,再发送给NLog或Serilog进行整理、存储等操作。可以理解为NLog和Serilog只是对日志进行处理而已
# ILogging、NLog、Serilog的很多功能重合,不建议混用。
# NLog支持控制写入日志文本的最大字节和最多副本,并且有丰富的日志匹配规则,Serilog不清楚
# Serilog能对日志进行结构化,能够以json对象输出内容。NLog虽然也能但是配置太繁琐。
# 在分布式部署下,日志需要集中化管理方面,通常可以专门把日志放在共有的数据库、MongDB等地方,它们三者都可以实现。但更高效的是用Serilog输出到Exceptionless分析站点上

4.选择

标签:logger,netcore,Serilog,NLog,ILogger,日志,public
From: https://www.cnblogs.com/long-live/p/nl.html

相关文章

  • WinForm(十四)窗体滚动日志
    在桌面程序里,一般日志记录到文件里就可以了,但有的时间,也需要在窗体上动态滚动显示,这时,就需要引入日志框架了。这里引入的依旧是NLog(在我的MiniAPI系统里,用的也是NL......
  • WinForm(十四)窗体滚动日志
    在桌面程序里,一般日志记录到文件里就可以了,但有的时间,也需要在窗体上动态滚动显示,这时,就需要引入日志框架了。这里引入的依旧是NLog(在我的MiniAPI系统里,用的也是......
  • WinForm(十四)窗体滚动日志
    在桌面程序里,一般日志记录到文件里就可以了,但有的时间,也需要在窗体上动态滚动显示,这时,就需要引入日志框架了。这里引入的依旧是NLog(在我的MiniAPI系统里,用的也是......
  • 训练日志 2018.10.11
    昨天晚上打比赛,感觉手好生,题意看了半天,才看懂,然后就是TLE,这回还好一点,马上想到了,修改的算法,但是细节没处理好,WA了,找了好一会才发现代码的错误,第二题就更艰辛了,一开始就跑偏......
  • aws rds 发送慢日志邮件
    AWSRDS不提供主机文件访问权限,因此无法直接访问数据库日志。但是,AWSRDS提供将数据库日志导出到CloudWatchLogs的功能,您可以访问该功能进行监控报警。解决方案概述操......
  • 使用expect在生产环境中跨机器拿日志
    1、shell脚本config_file_path=$1port=$2sjc=$3user_name="sdbadmin"#read-sp"sdbadmin'spassword:"passwd="1qaz@WSX123"#获取当前脚本的执行路径SCRIPT_PAT......
  • 温习日志-13
    温习日志——2023年2月6日下午学习内容InternationalizingDates(Intl)通过newIntl.DateTimeFormat('当地ISO码',可以对创建的对象具体格式化)创建对象,通过.format......
  • 蓝桥杯备战日志(Python)10-最短路-(图的遍历)
    最短路原题如下图所示, 是一个无向图,其中蓝色边的长度是 、橘色边的长度是 、绿色边的长度是 。则从  到  的最短距离是多少?分析本题考查图的遍历,本题使用深度优先(DF......
  • nginx访问日志和错误日志分割
    #!/bin/sh#Program:#Autocutnginxlogscript.#nginx日志路径LOGS_PATH=/home/wwwlogsTODAY=$(date-d'today'+%Y-%m-%d)#移动日志并改名mv${LOGS_PA......
  • Nginx log 日志分割
    Nginx日志不处理的话,会一直追加,文件会变得很大方法1:给日志文件名加上日期【推荐】log_formataccess-upstream'$time_iso8601|$request|$remote_addr|$upstream_respon......