asp.net core日志记录探索

主要参考:ASP.NET Core 中的日志记录

首先创建了一个MVC项目

dotnet new mvc -n mvcSite

然后考虑添加日志组件的引用

Install-Package Microsoft.Extensions.Logging

asp.net 内置日志记录提供程序包括:Console、Debug、EventSource 等

  • 控制台提供程序Microsoft.Extensions.Logging.Console 提供程序包向控制台发送日志输出。
  • 调试提供程序Microsoft.Extensions.Logging.Debug 提供程序包使用 System.Diagnostics.Debug 类(Debug.WriteLine 方法调用)来写入日志输出。
    在 Linux 中,此提供程序将日志写入 /var/log/message 。
  • EventSource 提供程序Microsoft.Extensions.Logging.EventSource 提供程序包可实现事件跟踪。 在 Windows 中,它使用 ETW。 提供程序可跨平台使用,但尚无支持 Linux 或 macOS 的事件集合和显示工具。
    对比了一下,比较跨平台,又简单易用的也只有Console 控制台了
    添加引用
    Install-Package Microsoft.Extensions.Logging.Console

在代码中启用, 文件 Program.cs 中增加日志提供程序

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .ConfigureLogging((hostingContext, logging) =>
                {
                    logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
                    logging.AddConsole();
                });

创建一个演示控制器LoggingController

public class LoggingController: Controller
    {
        public IActionResult Index()
        {

            return Content("Hello Logging");
        }
    }
简单测试

采用脚本http localhost:50010/Logging测试接口,正常返回信息。服务端生成大量日志,日志级别:Info

ASP.NET Core 定义了以下日志级别(按严重性从低到高排列)。
Trace 跟踪 = 0
有关通常仅用于调试的信息。 这些消息可能包含敏感应用程序数据,因此不得在生产环境中启用它们。 默认情况下禁用。
Debug 调试 = 1
有关在开发和调试中可能有用的信息。 示例:Entering method Configure with flag set to true. 由于日志数量过多,因此仅当执行故障排除时,才在生产中启用 Debug 级别日志。
Information 信息 = 2
用于跟踪应用的常规流。 这些日志通常有长期价值。 示例:Request received for path /api/todo
Warning 警告 = 3
表示应用流中的异常或意外事件。 可能包括不会中断应用运行但仍需调查的错误或其他条件。 Warning 日志级别常用于已处理的异常。 示例:FileNotFoundException for file quotes.txt.
Error 错误 = 4
表示无法处理的错误和异常。 这些消息指示的是当前活动或操作(例如当前 HTTP 请求)中的失败,而不是整个应用中的失败。 日志消息示例:Cannot insert record due to duplicate key violation.
Critical 严重 = 5
需要立即关注的失败。 例如数据丢失、磁盘空间不足。

appsettings.Development.json中配置了当前开发模式下的日志输出级别

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

"Microsoft" 设置为 Warning 警告,再次运行上面的脚本请求接口,服务端再不返回任何 Information 级别的日志。如果将日志级别降为 Debug 调试,输出更多日志,包括 Debug 级别和Information 级别。
为了演示出自定义的日志输出,防止底层日志干扰,暂时将"Microsoft" 设置为 Warning 警告。

public class LoggingController: Controller
    {
        ILogger<LoggingController> _logger;
        public LoggingController(ILogger<LoggingController> logger)
        {   
            _logger = logger;
        }
        public IActionResult Index()
        {
            var username = "zhangsan";
            _logger.LogTrace("当前用户ID为",username);
            _logger.LogDebug("当前为调试模式");
            _logger.LogInformation("正在调用日志记录接口");
            _logger.LogWarning("文件A未找到");
            _logger.LogError("访问数据库异常");
            _logger.LogCritical("内存已满,无法响应");

            return Content("Hello Logging");
        }
    }

自定义日志输出

默认设置的日志级别为 Debug,高于该级别的日志全部输出,只有跟踪级别的日志未能输出。

接下来继续到发布环境下查看下日志输出情况

编写Dockerfile -> 生成镜像->推送镜像库->编排容器->运行
编排脚本

version: '3.3'
services:
  mvcSite: 
    image: registry.cn-beijing.aliyuncs.com/djm/mvcSite:latest
    ports:
       - "8081:80"
    volumes:
      - ./mvcSite/appsettings.json:/app/appsettings.json
    networks:
       - backend
    restart: always
    container_name: mvcSite_frame2019_test
        
        
networks:
  backend:

再次采用脚本http localhost:8081/logging测试,由于发布环境默认采用的日志级别是警告 Warning,控制台只返回来三条日志

mvcSite_frame2019_test | warn: mvcSite.Controllers.LoggingController[0]
mvcSite_frame2019_test |       文件A未找到
mvcSite_frame2019_test | fail: mvcSite.Controllers.LoggingController[0]
mvcSite_frame2019_test |       访问数据库异常
mvcSite_frame2019_test | crit: mvcSite.Controllers.LoggingController[0]
webftp_frame2019_test |       内存已满,无法响应

将容器日志保存为文件

在生产环境下,将日志输出到控制台可不行,上一节介绍过 fluentd 相关的文章 使用Fluentd收集Docker容器日志
改写编排脚本

version: '3.3'
services:
  mvcSite: 
    image: registry.cn-beijing.aliyuncs.com/djm/mvcSite:latest
    ports:
       - "8081:80"
    volumes:
      - ./mvcSite/appsettings.json:/app/appsettings.json
    networks:
       - backend
    restart: always
    container_name: mvcSite_frame2019_test
    logging:
      driver: "fluentd"
      options:
        fluentd-address: localhost:24224
        tag: mvcSite_frame2019_test
        
networks:
  backend:

调用成功后,打开日志文件mvcSite_frame2019_test.20190614.log:

�[40m�[1m�[33mwarn�[39m�[22m�[49m: mvcSite.Controllers.LoggingController[0]
      文件A未找到
�[41m�[30mfail�[39m�[22m�[49m: mvcSite.Controllers.LoggingController[0]
      访问数据库异常
�[41m�[1m�[37mcrit�[39m�[22m�[49m: mvcSite.Controllers.LoggingController[0]
      内存已满,无法响应

有一些控制字符成乱码了,不过还好,主要信息还能识别

后来换Serilog,对日志输出指定下字符串模板就没问题了

.WriteTo.Console(
        outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}")
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容