在Winform项目和Web API的.NetCore项目中使用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);

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

 

专注于代码生成工具、.Net/.NetCore 框架架构及软件开发,以及各种Vue.js的前端技术应用。著有Winform开发框架/混合式开发框架、微信开发框架、Bootstrap开发框架、ABP开发框架、SqlSugar开发框架等框架产品。
 转载请注明出处:撰写人:伍华聪  http://www.iqidi.com

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
7月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
579 4
|
9月前
|
XML 缓存 API
eBay 商品详情 API 深度解析:从基础信息到变体数据获取全方案
本文详解如何通过 eBay 的 GetItem 和 GetMultipleItems 接口获取商品详情数据,涵盖基础属性、价格、变体、卖家信息等,并提供可复用的 Python 代码。内容包括 API 核心参数、响应结构、代码实现、实战注意事项及扩展方向,助力跨境电商开发。
|
8月前
|
JSON API 数据格式
亚马逊:调用商品上传API实现全球多站点商品信息一键发布,降低人工操作成本
在亚马逊多站点电商运营中,手动上传商品效率低且易出错。通过调用Selling Partner API,可实现商品信息一键全球发布,大幅提升效率、降低成本。本文详解API功能、数据准备、代码实现与优化策略,助力企业轻松掌握自动化发布流程,提升全球运营能力。
339 0
|
10月前
|
存储 监控 NoSQL
【干货满满】电商API数据抓取实战:从商品信息到订单管理全链路实现
本文详解构建电商API数据抓取系统,涵盖商品采集、订单管理、防封策略、数据存储与分析,适用于价格监控、供应链管理等场景。
|
10月前
|
JSON 供应链 API
1688 电商 API 接口,供应商信息查询便捷通道
1688电商API接口为企业提供高效查询供应商信息的解决方案,支持自动化获取公司名称、联系方式、信用评级等核心数据,并具备批量处理与精准筛选功能,提升供应链管理效率。
427 1
|
9月前
|
机器学习/深度学习 人工智能 缓存
电商 API 接口:开启全平台商品信息同步新时代
在数字化浪潮下,电商平台激增,消费者跨平台购物成为常态。然而,商品信息分散导致数据不一致、库存混乱等问题。电商 API 接口应运而生,通过标准化数据交换,实现多平台商品信息实时同步,提升运营效率、降低成本、增强用户体验,成为企业数字化转型的关键引擎。
455 0
|
10月前
|
JSON API PHP
化学元素信息,元素周期表查询免费API完整指南
本接口提供权威化学元素的100+项参数查询服务,涵盖原子结构、物理性质、分布数据等科研级参数。支持中文名称、元素符号(区分大小写)或原子序数查询,适用于教育软件、化学工具和科研系统开发。数据版权归属接口盒子。
236 0
|
10月前
|
JSON API PHP
万年历API接口详解:精准获取指定日期信息
本文介绍接口盒子提供的万年历API,支持获取农历、节气、宜忌、星座等信息,具备完整的请求与返回示例,适用于黄历、日程管理等应用开发。
2461 0
|
10月前
|
API 开发者 Python
淘宝API系列:淘宝商品优惠信息API接口详解
本文介绍了如何通过淘宝开放平台调用商品优惠券API接口,包含注册开发者账号、创建应用、使用item_search_coupon接口查询优惠券信息及数据字段说明。提供Python请求示例,适用于电商促销管理与用户优惠策略实现。
|
7月前
|
缓存 数据可视化 定位技术
快递鸟快递API技术指南:获取物流轨迹信息与轨迹地图的解决方案
在当今电商竞争激烈的环境中,物流体验已成为提升用户满意度的关键因素。研究表明,超过 75% 的消费者会因物流信息不透明而放弃下单。
1517 1