首页 > 其他分享 >.NET 日志系统-3 结构化日志和集中日志服务

.NET 日志系统-3 结构化日志和集中日志服务

时间:2023-09-01 12:22:52浏览次数:47  
标签:Exceptionless 结构化 Serilog Debug new 日志 NET

.NET 日志系统-3 结构化日志和集中日志服务

系列文章

结构化日志

结构化日志比普通文本更利于日志的分析,结构化日志的格式为json格式。

Serilog

使用步骤

  1. NLog也可以配置结构化日志,不过配置麻烦,推荐用Serilog。

  2. NuGet安装:Serilog.AspNetCore

  3. Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug() //最低级别设置为Debug
    .Enrich.FromLogContext()
    .WriteTo.Console(new JsonFormatter())
    .CreateLogger();
    builder.AddSerilog();
    
  4. 要记录的结构化数据通过占位符来输出:

    logger.LogWarning("新增用户{@person}",new {Id=3,Name="zack"});
    
  5. 同样可以输出到文件、数据库、MongoDB等。

代码实现

接文章日志系统文章-1和-2(前2篇文章),代码一样,只需要在注入的时候添加第三步即可。

services.AddLogging(logBuilder =>
{
    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Debug() //最低级别设置为Debug
        .Enrich.FromLogContext()
        .WriteTo.Console(new JsonFormatter())
        .CreateLogger();
    logBuilder.AddSerilog();
});

效果展示

image

模拟用户

通过第4步占位符实现结构化数据

首先在Test2中创建一个User类

class User
{
    public string Name { get; set; }
    public string Email { get; set; }
}

然后模拟一下注册用户

public void Test()
{
    User user = new User { Name = "admin", Email = "[email protected]" };
    _logger.LogDebug("注册一个用户{@person}",user);
}

效果展示

image

集中化日志

集群化部署环境中,有N多服务器,如果每个服务器都把日志记录到本地文件,不便于查询、分析。需要把日志保存到集中化的日志服务器中。

  1. 使用NLog、Serilog等可以把日志记录到数据库、MongoDB等地方,就可以实现“结构化、集中日志服务”,不过需要自己编写日志分析程序。
  2. 公有云厂商一般都提供了日志云服务,都带有分析功能,都有对应Serilog插件,即使没有提供,开发一个插件也不麻烦。
  3. 如果没有用云平台或者想自己控制日志服务们可以使用Exceptionless或者ELK等。

Exceptionless

在线版有些功能需要收费,可以去官网用docker将Exceptionless部署到自己的服务器中。

官网:https://exceptionless.com/

找到Docs页面,列表最小面的Self Hosting中就有Docker部署的方法。

试用步骤:

Exceptionless https://be.exceptionless.io/

  1. 到Exceptionless官网注册、登录后,新建一个项目,安装向导输入公司名、项目名后,网站会给出一个apikey。
  2. 项目Nuget安装Serilog的Exceptionless插件:Serilog.Sinks.Exceptionless。
  3. 在程序最开始加上一句ExceptionlessClient.Default.Startup("拿到的apikey"),然后Serilog的配置加上一句:.WriteTo.Exceptionless()

创建项目

image

选择项目

马赛克部分为apikey,然后根据提示安装Nuget

Install-Package Exceptionless.AspNetCore

image

代码实现

其实上面的官网网站讲得很清楚了,在程序的开头加上

ExceptionlessClient.Default.Startup("apikey");

然后接上第二步安装Serilog.Sinks.Exceptionless,继续第三步注入的时候添加

services.AddLogging(logBuilder =>
{
    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Debug() //最低级别设置为Debug
        .Enrich.FromLogContext()
        .WriteTo.Console(new JsonFormatter())
        .WriteTo.Exceptionless() //添加这行
        .CreateLogger();
    logBuilder.AddSerilog();
});

效果展示

image

image

总结

普通项目用NLog输出到文本文件即可,根据需要设定过滤、分类规则

集群部署的项目用Serilog+集中式日志服务,需要记录结构化日志,再进行结构化输出

参考链接

每日一道面试题

  1. 在.Net中所有可序列化的类都被标记为_____?

    答:[serializable]

  2. 在.Net托管代码中我们不用担心内存漏洞,这是因为有了______?

    答:GC。

标签:Exceptionless,结构化,Serilog,Debug,new,日志,NET
From: https://www.cnblogs.com/ZYPLJ/p/17671522.html

相关文章

  • 钡铼科技打造的BL122:完美集成Modbus与Profinet通信的利器
        钡铼技术BL122协议转换网关是一款专业的设备,用于将Modbus协议转换为Profinet协议。BL122采用了先进的嵌入式ARMMCU和基于LinuxOS系统的开发,具备出色的性能和高度的稳定性。BL122支持多种下行采集方式,包括ModbusRTU、ModbusTCP和ModbusASCII等。通过将这些不同的......
  • BL122:钡铼技术助力实现高效Modbus到Profinet协议转换
     钡铼技术BL122协议转换网关是一款专业的设备,用于将Modbus协议转换为Profinet协议。BL122采用了先进的嵌入式ARMMCU和基于LinuxOS系统的开发,具备出色的性能和高度的稳定性。BL122支持多种下行采集方式,包括ModbusRTU、ModbusTCP和ModbusASCII等。通过将这些不同的Modbus协......
  • 手写raft(三) 实现日志压缩
    手写raft(三)实现日志压缩在上一篇博客中MyRaft实现了日志复制功能,按照计划接下来需要实现日志压缩。手写raft(一)实现leader选举手写raft(二)实现日志复制1.什么是raft日志压缩?我们知道raft协议是基于日志复制的协议,日志数据是raft的核心。但随着raft集群的持续工作,ra......
  • [转][C#].NET 6程序无法在Win7上运行
    转自:https://blog.csdn.net/u013667796/article/details/131080604补丁下载地址:https://www.catalog.update.microsoft.com/Search.aspx?q=KB4457144 原文内容:使用.NET6写了一个程序,结果要运行在Win7上。第一次启动时,程序弹出一个对话框,需要安装.NET运行环境,按步骤执行,安装......
  • .Net 6/NetCore3.1 Vue Element Uniapp前后端分离低代码快速开发框架
    .Net6/NetCoreVueElementUniapp前后端分离低代码快速开发框架这是一个能提高开发效率的开发框架,全自动生成PC与移动端(uniapp)代码;支持移动ios/android/h5/微信小程序。一、框架能做什么1、前后端分离项目2、纯后端项目3、移动端开发uni-app(IOS、Android、H5、微信小程......
  • .NET 6 使用AutoFac
    一先下载相关资源包 二定义module,方便注入 三在Program.cs注册 四 在构造函数中注入 ......
  • Skywalking 9.5 +Net6 SkyDotNet的简单使用
    官方下载地址 Downloads|ApacheSkyWalkingjdk12.2解压找到bin/startup目录启动,不连接数据库,采用内存记录webapp\application.yml可以更改web程序启动端口config\application.yml更改配置,具体百度上面这两个可以默认设置,不更改启动后界面 然后Net6......
  • Oracle EBS查看请求日志报404 not found错误,FNDWRR.exe资源访问不存在
    问题描述如上图中,查看请求时,点击“查看日志”按钮后,正常浏览器会打开一个页面,可以看到这个请求的日志,但出现问题后,浏览器会报404错误,如下图解决方法cd$EBS_ORACLE_HOME/common/scripts实际目录:(/oracle/PROD/fs1/FMW_Home/Oracle_EBS-app1/common/scripts)请根据自己的目......
  • Quartz.Net来实现C#中的定时任务
    首先,你需要通过NuGet包管理器或手动下载并添加Quartz.Net库到你的项目中。 usingQuartz;usingQuartz.Impl;publicclassMyJob:IJob{publicTaskExecute(IJobExecutionContextcontext){//在这里编写你的任务逻辑Console.WriteLine("任......
  • c#.net 支持 超大上G,多附件上传
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......