• Serilog 来记录日志


    在Winform项目和Web API的.NetCore项目中使用Serilog 来记录日志信息

     

    在我们常规的调试或者测试的时候,喜欢把一些测试信息打印在控制台或者记录在文件中,对于.netframework项目来说,我们输出控制台的日志信息习惯的用Console.WriteLine来输出查看,不过对于.netcore的项目来说,这种输出看不到任何信息了,不过即使这样,我们建议还是把一些测试的日志记录在文件中,供查看对比。本篇随笔介绍使用Serilog 来记录日志信息,包括应用于.netframework项目和.netcore项目中都适合。

    1、在Winform项目中整合Serilog 记录日志

    在.NET使用日志框架第一时间会想到NLog或是Log4Net,Serilog 是这几年快速崛起的Log框架之一,Serilog是以Structured logging 为基础进行设计,通过logging API 可以轻松的记录应用程序中对象属性,方便快速进行logging 内容进行查询与分析,并将其纪录内容通过json (可指定) 的方式输出。

    不管对于.netframwork或者.netcore的Winform项目来说,使用Serilog 来记录日志信息的操作都很类似,它都支持的。

    官网地址:https://serilog.net/,或者参考它的Github地址:https://github.com/serilog/serilog 

      我们只需要引入对应的几个Serilog 相关DLL即可,如下所示。

     然后在Main函数中添加对应的处理代码,如下所示。

    复制代码
        static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                Log.Logger = new LoggerConfiguration()
                    .MinimumLevel.Debug()
                    .Enrich.FromLogContext()
                    .WriteTo.Console()
                    .WriteTo.File("logs/log.txt", rollingInterval: RollingInterval.Day)
                    .CreateLogger();
    复制代码

    在类代码或者界面代码中,直接通过方法输出日志信息即可。

       //使用Serilog记录日志信息
       Serilog.Log.Information(json);

    它和其他Log组件,如Log4net一样,它的使用区分类别来输出不同类型的日志,支持Verbose、Debug、Information、Error、Warning、Fatal 几个接口的输出。

    复制代码
    Serilog.Log.Verbose("verbose"); // 用于跟踪信息和调试细节,不会输出显示出来
    
    //以下为常用记录日志方法
    Serilog.Log.Information("info");
    Serilog.Log.Debug("debug");
    Serilog.Log.Warning("warning");
    Serilog.Log.Error("err");
    Serilog.Log.Fatal("fatal"); 
    复制代码

     输出日志信息如下所示。

     Serilog 如果想个性化设置日志输出到什么地方,需要引用一些serilog的接收器。Serilog的输出对象称之为Sink

     Github上提供了大量的Serilog 第三方的可用sinks,这里简单的列举几个常用的:

    2、在.NetCore项目的Web API中整合Serilog 

     在.netcore的Web API项目中配置和上面的有一些差异,引入相关的Serilog组件类库,如下所示。

     其中需要在IHostBuilder或者IWebHostBuilder中注入Serilog接口,如下初始化代码所示。

     在Web API的控制器中使用代码如下所示

    复制代码
        /// <summary>
        /// 用于接收长语音信息回调的处理
        /// </summary>
        [ApiController]
        [Route("[controller]")]
        public class LongVoiceController : ControllerBase
        {
            private readonly ILogger<LongVoiceController> _logger;
    
            public LongVoiceController(ILogger<LongVoiceController> logger)
            {
                _logger = logger;
            }
    
            /// <summary>
            /// 测试控制器,路由:get /longvoice
            /// </summary>
            /// <returns></returns>
            [HttpGet]
            public List<string> TestList()
            {
                return new List<string>()
                {
                    "测试列表接口",
                    "检查控制器正常"
                };
            }
    
            /// <summary>
            /// 回调写入结果, 路由:post /longvoice
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            [HttpPost]
            public async Task<CommonResultDto> CallBack(LongVoiceResultDto input)
            {
                CommonResultDto result = null;
                var json = JsonConvert.SerializeObject(input, Formatting.Indented);
                _logger.LogInformation(json);
    
                result = new CommonResultDto(0, "操作成功");
                return await Task.FromResult(result);
            }
        }
    复制代码

    我们注意到直接使用web API 的 IIogger<T>接口调用写日志即可。

    _logger.LogInformation(json);

    这样我们可以看到相关的日志输出

    主要研究技术:代码生成工具、会员管理系统、客户关系管理软件、病人资料管理软件、Visio二次开发、酒店管理系统、仓库管理系统等共享软件开发
    专注于Winform开发框架/混合式开发框架Web开发框架Bootstrap开发框架微信门户开发框架的研究及应用
      转载请注明出处:
    撰写人:伍华聪  http://www.iqidi.com 
  • 相关阅读:
    Google Accounts,OpenID,OAuth
    Namespaces(命名空间)
    <Araxis Merge>Windows平台下的Merge概览
    <Araxis Merge>快速一览文件的比较与合并
    <Araxis Merge>保存文件
    <Stackoverflow> 声望和节制
    <Stackoverflow> 如何提问
    收集一些好用的搜索引擎
    一个简单的scrapy爬虫抓取豆瓣刘亦菲的图片地址
    应用python编写简单新浪微博应用(一)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/15997919.html
Copyright © 2020-2023  润新知