前言

我们公司在日志管理方面一直没有统一,主要痛点有:

  1. 每个开发人员都是各用各的,存储日志的形式也是五花八门,如:本地文件,数据库,Redis,MongoDB
  2. 由于公司访问服务器要通过堡垒机,所以本机无法直连测试或生产环境。如果测试日志是写入本地文件,就需要开发人员只能登录服务器上查看日志,查看非常不方便。

综合以上所述有三种选择:

      1. 自己写一个日志系统
      2. 找一个现成的
      3. 不记录日志了

综合考虑,第三点肯定是不靠谱的,第一点成本太高,公司本来就比较忙,那就只能去找一个现成的了…

Seq简介

Seq是运行在一台机器上的日志服务器。您的应用程序通过像Serilog这样的框架发送结构化事件:

Log.Information("Hello, {Name}!", Environment.UserName);

结构化日志记录保留了自定义的属性值以及与每个事件关联的文本。

这些信息通过网络发送到Seq,Seq显示它们并使其可搜索:

目前支持三种语言:.NET与NET Core,Java,Node.js,以及Python。

Seq主要功能:

丰富的事件数据 -以结构化形式记录上文信息与应用程序事件,支持消息模板将文本数据与结构话数据无缝连接。下图中所有属性都是由使用者自定义的。

多种查询方式 -支持以SQL表达式查询,以及C#中的,==,!=,<,<=,内置StartsWith(),EndsWith(),IndexOf() 和Contains(),并支持文本全文检索。

仪表盘 - 搜索框添加查询语句也可以是SQL查询,匹配到相应的数据后,使用右侧的Add to dashboard创建对应的仪表盘

添加警报 -当检测到警报情况时,可以通过邮件将情况通知到相关人员。单击仪表板图表上ALERTS选项卡下的+按钮:

 

      Seq缺点:

  1. 内存消耗较高,属于那种有多少就吃多少,如果吃撑了,就又吐出来一部分返回给系统,真的是有点不要脸。
  2. 收费,非开源系统,所以免费版本功能会有阉割。

详细介绍可查看官网文档:https://docs.getseq.net/docs

.NET Core实践

1.下载并安装Seq服务器

2.打开安装程序启动安装向导,一路下一步,完成后浏览器输入http://localhost:5341/#/events,5341是Seq的默认端口。Seq是托管在Windows服务中,通过win+r输入services.msc命令运行查看。

环境搭建完成后,下面我们看下如何在项目中应用:

1.新建一个项目,ASP.NET Core 或 MVC都可以

2.添加Nuget程序包:

            • Seq.Extensions.Logging
            • Autofac
            • Autofac.Extensions.DependencyInjection

   3.在appsettings.json添加一个"Seq"属性:

{
"Logging": {
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "Warning"
}
},
"Seq": {
"ServerUrl": "http://localhost:5341/", //Seq本地环境地址.
"ApiKey": "fCT0LNqspu3kituQMb", //在Seq系统创建的项目名称KEY值。可通过此KEY值检索出项目下的所有日志信息
"MinimumLevel": "Trace",
"LevelOverride": {
"Microsoft": "Warning"
}
},
"Console": {
"LogLevel": {
"Default": "Warning"
}
}
}
}

4.   在你的Startup类的ConfigureServices()方法,调用AddSeq()上loggingBuilder提供AddLogging()。

services.AddLogging(loggingBuilder =>
{
//loggingBuilder.AddSeq();
loggingBuilder.AddSeq(Configuration.GetSection("Seq"));
});

5.配置依赖注入

public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddLogging(loggingBuilder =>
{
/*此方法默认使用本地地址: 5341端口*/
//loggingBuilder.AddSeq();
/*加载Seq配置*/
loggingBuilder.AddSeq(Configuration.GetSection("Seq"));
});
services.AddMvc(); /*这里使用Autofac作为依赖注入*/
var containerBuilder = new ContainerBuilder();
/*注入Seq记录日志对象*/
containerBuilder.RegisterGeneric(typeof(Logger<>)).As(typeof(ILogger<>)).InstancePerMatchingLifetimeScope();
/*因为更改了默认的依赖注入框架,所以需要将其原来的对象填充值新的依赖框架中*/
containerBuilder.Populate(services);
var container = containerBuilder.Build();
return new AutofacServiceProvider(container);
}

6.将ILogger实例注入到控制器中,并写入日志

private ILogger<ValuesController> _logger;

        public ValuesController(ILogger<ValuesController> logger)
{
_logger = logger;
} // GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
_logger.LogInformation("{Projece}&{ModuleName} Get Test", "SeqExample", "Values");
return new string[] { "value1", "value2" };
}

7.运行结果

可以看到,我们通过消息模板,自定义了两个属性,Project和ModuleName。在实际使用中我们可以根据公司业务来建立统一的消息模板,对项目日志分类管理并查看。

总结

由于现在我使用的是免费版的,在很多方面有限制,如:不能将本地改为公网地址(可通过反向代理解决),不支持邮件预警。

类似这种限制还有,但都不影响使用,作为日志系统,免费版本的基础功能已经足够使用,并且查询性能并不弱。谁让.NET开源框架少了,比起自己写一个这样的系统,我已经很知足了!

Seq目前在国内用的公司很少,所以此文只是抛砖引玉,便于大家在选择日志框架方面可以多一个选择,仅此而已。

.NET下使用 Seq结构化日志系统的更多相关文章

  1. 结构化日志类库 ---- Serilog库

    在过去的几年中,结构化日志已经大受欢迎.而Serilog是 .NET 中最著名的结构化日志类库 ,我们提供了这份的精简指南来帮助你快速了解并运用它. 0. 内容 设定目标 认识Serilog 事件和级 ...

  2. 如何利用NLog输出结构化日志,并在Kibana优雅分析日志?

    上文我们演示了使用NLog向ElasticSearch写日志的基本过程(输出的是普通文本日志),今天我们来看下如何向ES输出结构化日志.并利用Kibana中分析日志. NLog输出结构化日志 Elas ...

  3. .NET Core开发日志——结构化日志

    在.NET生态圈中,最早被广泛使用的日志库可能是派生自Java世界里的Apache log4net.而其后来者,莫过于NLog.Nlog与log4net相比,有一项较显著的优势,它支持结构化日志. 结 ...

  4. 探索ASP.Net Core 3.0系列六:ASP.NET Core 3.0新特性启动信息中的结构化日志

    前言:在本文中,我将聊聊在ASP.NET Core 3.0中细小的变化——启动时记录消息的方式进行小的更改. 现在,ASP.NET Core不再将消息直接记录到控制台,而是正确使用了logging 基 ...

  5. Asp.Net Core中利用Seq组件展示结构化日志功能

    在一次.Net Core小项目的开发中,掌握的不够深入,对日志记录并没有好好利用,以至于一出现异常问题,都得跑动服务器上查看,那时一度怀疑自己肯定没学好,不然这一块日志不可能需要自己扒服务器日志来查看 ...

  6. 【转】结构化日志类库 ---- Serilog库

    源地址:https://www.cnblogs.com/mq0036/p/8479956.html 解决异常: Invalid cast from 'System.String' to 'Serilo ...

  7. k8s-搭建 EFK 日志系统

    搭建 EFK 日志系统 大家介绍了 Kubernetes 集群中的几种日志收集方案,Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch.Fluentd 和 Kibana( ...

  8. Loki日志系统

    一.概述 背景 Loki的第一个稳定版本于2019年11月19日发布,是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统. Grafana 对 Loki ...

  9. .NET Core集成Seq+Serilog实现日志中心

    .NET Core集成Seq+Serilog实现日志中心 一,下载安装Seq https://datalust.co/download/all,版本很多,大家随便挑,开发版个人免费,商业版多账号需要收 ...

随机推荐

  1. ETL面试题集锦

    1. What is a logical data mapping and what does it mean to the ETL team? 什么是逻辑数据映射?它对ETL项目组的作用是什么? 答 ...

  2. Njinx配置

    参考地址: NGINX的百度百科:https://baike.baidu.com/item/nginx/3817705?fr=aladdin NGINX的中文网站:http://www.nginx.c ...

  3. GUI界面修饰

    function varargout = GUI20(varargin) % GUI20 MATLAB code for GUI20.fig % GUI20, by itself, creates a ...

  4. python shutil模块简单介绍

    python shutil模块简单介绍 简介 shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作. shutil 模块方法: copy(src, ...

  5. Step by Step use OBD2 Scanner Guide

    Learning to use a good automotive OBD2 code reader is one of the best ways you can continually inves ...

  6. Lonsdor K518ISE free update news on what makes and year can work

    Lonsdor K518ISE engineers recently tested a number of cars and verified working great, below are tes ...

  7. 大数据自学4-Hue集成环境中各模组说明

    前面已经学习了如何将数据从关系型数据库导入到Hive/HDFS,并且在Windows客户端查询导入的数据,接下来继续学习CDH,知识点: 1.Hue环境中DB Query如何使用,DB Query这个 ...

  8. HTML的简介

    1.HTML语言是做显示用的.HTML文件由浏览器来转译执行.(全站工程师:全都会.) 2.静态网页由HTML(显示).CSS(修饰).JAVAScript(简单交互)三种元素构成.3.动态网页:数据 ...

  9. 合并两个JsonArray

    //合并两个JSONArray public static String joinJSONArray(JSONArray mData, JSONArray array) { StringBuffer ...

  10. spring总结之一(spring开发步骤、bean对象的管理、bean生命周期)

    ###spring 1.概念:开源,轻量级,简化开发的企业级框架. 开源:免费,发展快. 轻量级:占内存小. 简化开发:通用的功能封装,提高程序员的开发效率.--------------------- ...