翼度科技»论坛 编程开发 .net 查看内容

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

12

主题

12

帖子

36

积分

新手上路

Rank: 1

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

系列文章

结构化日志

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

使用步骤


  • NLog也可以配置结构化日志,不过配置麻烦,推荐用Serilog。
  • NuGet安装:Serilog.AspNetCore
    1. Log.Logger = new LoggerConfiguration()
    2. .MinimumLevel.Debug() //最低级别设置为Debug
    3. .Enrich.FromLogContext()
    4. .WriteTo.Console(new JsonFormatter())
    5. .CreateLogger();
    6. builder.AddSerilog();
    复制代码
  • 要记录的结构化数据通过占位符来输出:
    1. logger.LogWarning("新增用户{@person}",new {Id=3,Name="zack"});
    复制代码
  • 同样可以输出到文件、数据库、MongoDB等。
代码实现

接文章日志系统文章-1和-2(前2篇文章),代码一样,只需要在注入的时候添加第三步即可。
  1. services.AddLogging(logBuilder =>
  2. {
  3.     Log.Logger = new LoggerConfiguration()
  4.         .MinimumLevel.Debug() //最低级别设置为Debug
  5.         .Enrich.FromLogContext()
  6.         .WriteTo.Console(new JsonFormatter())
  7.         .CreateLogger();
  8.     logBuilder.AddSerilog();
  9. });
复制代码
效果展示


模拟用户

通过第4步占位符实现结构化数据
首先在Test2中创建一个User类
  1. class User
  2. {
  3.     public string Name { get; set; }
  4.     public string Email { get; set; }
  5. }
复制代码
然后模拟一下注册用户
  1. public void Test()
  2. {
  3.     User user = new User { Name = "admin", Email = "123@qq.com" };
  4.     _logger.LogDebug("注册一个用户{@person}",user);
  5. }
复制代码
效果展示


集中化日志

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

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

在线版有些功能需要收费,可以去官网用docker将Exceptionless部署到自己的服务器中。
官网:https://exceptionless.com/
找到Docs页面,列表最小面的Self Hosting中就有Docker部署的方法。
试用步骤:
Exceptionless https://be.exceptionless.io/

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


选择项目

马赛克部分为apikey,然后根据提示安装Nuget
  1. Install-Package Exceptionless.AspNetCore
复制代码

代码实现

其实上面的官网网站讲得很清楚了,在程序的开头加上
  1. ExceptionlessClient.Default.Startup("apikey");
复制代码
然后接上第二步安装Serilog.Sinks.Exceptionless,继续第三步注入的时候添加
  1. services.AddLogging(logBuilder =>
  2. {
  3.     Log.Logger = new LoggerConfiguration()
  4.         .MinimumLevel.Debug() //最低级别设置为Debug
  5.         .Enrich.FromLogContext()
  6.         .WriteTo.Console(new JsonFormatter())
  7.         .WriteTo.Exceptionless() //添加这行
  8.         .CreateLogger();
  9.     logBuilder.AddSerilog();
  10. });
复制代码
效果展示



总结

普通项目用NLog输出到文本文件即可,根据需要设定过滤、分类规则
集群部署的项目用Serilog+集中式日志服务,需要记录结构化日志,再进行结构化输出
参考链接


  • 【.NET 6教程,.Net Core 2022视频教程,杨中科主讲】
每日一道面试题


  • 在.Net中所有可序列化的类都被标记为_____?
    答:[serializable]
  • 在.Net托管代码中我们不用担心内存漏洞,这是因为有了______?
    答:GC。

来源:https://www.cnblogs.com/ZYPLJ/archive/2023/09/01/17671522.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具