• AspNetCore中使用Serilog记录日志


    一、安装包

     第一个是主包,第二个是将日志输出到控制台,第三个是将日志输出到文件中;

    二、在Program.cs中配置

    public class Program
        {
            public static void Main(string[] args)
            {
                Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .Enrich.FromLogContext().WriteTo.Console()
    
                // 1. for debug file sink
                .MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Debug)
                .WriteTo.File($@".Logs{DateTime.Now.Year}-{DateTime.Now.Month}{DateTime.Now.Day}InfoInfo.txt", restrictedToMinimumLevel: LogEventLevel.Debug, rollingInterval: RollingInterval.Day)
    
                //2. for error file sink
                .WriteTo.File($@".Logs{DateTime.Now.Year}-{DateTime.Now.Month}{DateTime.Now.Day}ErrorError.txt", restrictedToMinimumLevel: LogEventLevel.Error, rollingInterval: RollingInterval.Day)
                .CreateLogger();
                
    
                CreateHostBuilder(args).Build().Run();
            }
    
            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureLogging(loggingBuilder =>
                    {
                        //清空所有日志提供程序,包括aspnetcore框架自带的控制台、调试窗口等
                        loggingBuilder.ClearProviders();
                    })
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    })
                .UseSerilog(/*(hostingContext, loggerConfiguration) =>
                    //从appsettings.json中读取配置
                    loggerConfiguration.ReadFrom.Configuration(hostingContext.Configuration)
                    .Enrich.FromLogContext()*/);
        }

    其中注释掉的UseSerilog中的内容是去appsetting.json中读取配置,因为写到文件夹中的路径我是写死在上边的;

    如果要在appsetting.json中配置:

    //"Serilog": {
      //  "WriteTo": [
      //    {
      //      "Name": "File",
      //      "Args": {
      //        "path": "./Logs/.txt",
      //        "rollingInterval": "Day"
      //      }
      //    },
      //    {
      //      "Name": "Console",
      //      "Args": {}
      //    }
      //  ]
      //}

    三、使用

    [Route("api/[controller]/[action]")]
    [ApiController]
    public class SpiderController : ControllerBase
        {
            private readonly ILogger<SpiderController> _logger;
    
            public SpiderController( ILogger<SpiderController> logger)
            {
                _logger = logger;
            }
    
            [HttpPost]
            public async Task<IActionResult> InitSpider([FromBody] TaskItemDTo taskItemDto)
            {
                try
                {
                    int i = 0;
                    int j = 1;
                    var a = j / i;
                    return Ok();
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex,ex.Message);
                    return BadRequest();
                }
            }
    }

    结果:

     我是将Debug级以上的保存在Info中,将Error级的保存在Error中;

  • 相关阅读:
    [原创]在使用SDK 23(6.0)版本后org.apache.http相关的类找不到的解决办法
    [原创] Gradle DSL method not found: 'android()' 和 buildToolsVersion is not specified 的解决办法。
    [原创]Android Lollipop (5.0) 原生代码 Settings 首页加载逻辑分析
    访问https接口报错 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系
    js for循环中延迟 setTimeout
    ABP框架扩展AbpSession
    web在线查看PDF文件
    web在线预览office文件
    sql server游标读取excel文件数据,更新到指定表中
    echarts图形销毁重新绘制
  • 原文地址:https://www.cnblogs.com/jf-ace/p/15532040.html
Copyright © 2020-2023  润新知