设为首页 加入收藏

TOP

深度长文-我花了10天时间造了个轮子,你们可能会有兴趣(三)
2019-09-17 18:58:19 】 浏览:74
Tags:深度 长文 花了 时间 轮子 你们 可能 兴趣
ptions = this.Configuration.GetSection("TomatoLog").Get<EventRabbitMQOptions>(); var client = new TomatoLogClientRabbitMQ(options); return client; }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }

上面的代码中,读取了客户端配置文件节点 TomatoLog 并反序列化为 EventRabbitMQOptions 配置对象,然后使用该配置对 TomatoLogClientRabbitMQ 进行了初始化,关于 EventRabbitMQOptions 在配置文件中的配置如下:

  "TomatoLog": {
    "LogLevel": "Information", // 写入日志级别,大于此级别的日志都将被吸入数据流中
    "ProjectLabel": "Example", // 项目标签,可为 null
    "ProjectName": "Example", // 项目名称,必须
    "SysOptions": { // 是否自动采集主机信息,可配置
      "EventId": true,
      "IP": true,
      "IPList": true,
      "MachineName": true,
      "ProcessId": true,
      "ProcessName": true,
      "ThreadId": true,
      "Timestamp": true,
      "UserName": true
    },
    "Tags": null, // 项目 Tag ,可 null
    "Version": "1.0.0", //  当前项目版本号,可为 null
    "Exchange": "TomatoLog-Exchange", // RabbitMQ 中配置的交换机名称
    "ExchangeType": "direct", // RabbitMQ 交换机类型
    "Host": "RabbitMQ Host ", // RabbitMQ 主机地址
    "Password": "RabbitMQ Passworrd", // RabbitMQ 连接密码
    "Port": 5672, // RabbitMQ 连接端口
    "QueueName": "RabbitMQ Queue", // RabbitMQ 日志队列名称
    "RouteKey": "Route Key", // RabbitMQ Route Key,根据 ExchangeType 动态设置
    "UserName": "RabbitMQ UserName", // RabbitMQ 连接用户名
    "vHost": "RabbitMQ vHost" // RabbitMQ 连接的 vHost
  }

这段配置看似复杂,其实非常简单,所有的一切都可以自由配置,在程序中,只需要一行代码初始化即,非常方便。

3.3 将异常写入数据流

在异常发生的时候,将异常写入数据流的操作非常简单,就像下面的代码

** 首先引入命名空间

using TomatoLog.Client.Extensions;

** 处理异常:

        public ActionResult<IEnumerable<string>> Get()
        {
            try
            {
                throw new NotSupportedException("Media Type");
            }
            catch (Exception ex)
            {
                ex.AddTomatoLogAsync();
            }
            return new string[] { "value1", "value2" };
        }

我们上面说过,能一行代码做完的事情就不要搞复杂了,使用 ex.AddTomatoLogAsync(); 就可以将日志写入到数据流中了,非常的简洁高效。如果需要写入自定义的日志信息,可以通过依赖注入获得日志客户端对象,然后写入自定义日志,比如

        public async Task<ActionResult<IEnumerable<string>>> Get()
        {
            await logClient.WriteLogAsync(1029, LogLevel.Warning, "Warning Infomation", "Warning Content", new { LastTime = DateTime.Now, Tips = "Warning" });
               
            return new string[] { "value1", "value2" };
        }
3.4 查看服务端收集日志

可以看到,上面我们一共写入了两条日志,分类为 Error 和 Warning,查看文件系统上,在项目 Example 目录下,有两个文件

点击列表进入查看,点击单行日志的任意位置,还可以查看详细信息

3.5 自定义日志查看列

还支持对日志的搜索和分页,搜索语法支持以下三种类型:

** ToFile 存储时:支持直接搜索字符串
** ToMongoDB 存储时: 支持 MongoDB 搜索语法
** ToES 存储时:支持 ElasticSearch 语法

分页支持:当前日志超过 100 行时(默认显示最新 100 条日志),自动出现 Previous/Next 分页导航按钮

结束语

TomatoLog 设计的基本原则是开放、高可扩展、自由、易用,通过简单的封装,让任何一个开发人员都能在 3 分钟内投入使用,享受 TomatoLog 带来的便利性,TomatoLog 只做简单的存储,可以看到,如果选择存储到 MongoDB 或者 ES 中的时候,大家还可以通过其它的日志挖掘工具对日志进一步的搜索和处理。

如果您觉得这个项目还不错,请点击 star ,如果希望加入此项目,成为贡献者,请留下您的 GitHub 账号,通过开源,让 .NETCore 生态越来越好。

喔~对了,欢迎报告BUG!

广州.NET微软技术俱乐部

最后,推广一下广州.NET微软技术俱乐部,欢迎更多的朋友加入我们 .NETCore 这个大家庭、一起学习交流。QQ群:651477282。

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇进行API开发选gRPC还是HTTP APIs? 下一篇【C#】【对象转XML】xml序列化

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目