在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实时生图绘板
相关文章
|
12月前
|
XML 缓存 API
eBay 商品详情 API 深度解析:从基础信息到变体数据获取全方案
本文详解如何通过 eBay 的 GetItem 和 GetMultipleItems 接口获取商品详情数据,涵盖基础属性、价格、变体、卖家信息等,并提供可复用的 Python 代码。内容包括 API 核心参数、响应结构、代码实现、实战注意事项及扩展方向,助力跨境电商开发。
|
11月前
|
JSON API 数据格式
亚马逊:调用商品上传API实现全球多站点商品信息一键发布,降低人工操作成本
在亚马逊多站点电商运营中,手动上传商品效率低且易出错。通过调用Selling Partner API,可实现商品信息一键全球发布,大幅提升效率、降低成本。本文详解API功能、数据准备、代码实现与优化策略,助力企业轻松掌握自动化发布流程,提升全球运营能力。
|
10月前
|
缓存 数据可视化 定位技术
快递鸟快递API技术指南:获取物流轨迹信息与轨迹地图的解决方案
在当今电商竞争激烈的环境中,物流体验已成为提升用户满意度的关键因素。研究表明,超过 75% 的消费者会因物流信息不透明而放弃下单。
2088 1
|
11月前
|
机器学习/深度学习 存储 API
唯品会:利用订单地址API校验收货信息,降低因地址错误导致的退货率
在电商中,地址错误常导致退货率升高,影响用户体验与运营效率。唯品会通过集成订单地址API,在用户下单时实时校验收货信息,有效减少因地址问题引发的退货。本文解析该方案的工作原理与实际效益,展示其如何助力平台降低退货率、节约成本并提升用户满意度。
|
11月前
|
存储 JSON 监控
淘宝/天猫:通过商品详情API实现多店铺商品信息批量同步,确保价格、库存实时更新
在电商运营中,管理多个淘宝或天猫店铺的商品信息(如价格、库存)耗时易错。本文介绍如何通过淘宝/天猫开放平台的商品详情API,实现自动化批量同步,确保信息实时更新。内容涵盖API调用、多店铺数据处理、实时更新策略及注意事项,助您高效管理多店铺商品信息。
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
5149 32
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
647 9
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
1426 55