设为首页 加入收藏

TOP

深度长文-我花了10天时间造了个轮子,你们可能会有兴趣(一)
2019-09-17 18:58:19 】 浏览:60
Tags:深度 长文 花了 时间 轮子 你们 可能 兴趣

介绍

这个项目叫做 TomatoLog,托管在 GitHub 项目上,使用的 License 是 MIT,请放心试用,目前该项目主要由我个人维护,还有两位大神加入了协作者中。
** TomatoLog.Server 基于 .NETCore2.2
** TomatoLog.Client 基于 netstandard2.0

项目主页以及组件说明

https://github.com/lianggx/TomatoLog

** 中文说明文档:
https://github.com/lianggx/TomatoLog/blob/master/README_Zh-cn.md

** 服务器版本:
https://github.com/lianggx/TomatoLog/releases

** 客户端组件 v1.0.2:
TomatoLog.Common(公共代码库)
TomatoLog.Client(客户端基础实现类)
TomatoLog.Client.Redis(Reids客户端,基于 CSRedisCore 客户端)
TomatoLog.Client.RabbitMQ(RabbitMQ客户端)

** 存储插件
TomatoLog.ToFile(写入文件)
TomatoLog.ToMongoDB(写入MongoDB)
TomatoLog.ToES(写入ElasticSearch)

演示代码位于项目目录 Examples 下。

1. TomatoLog 是干什么的

TomatoLog 来源于业务发展的实际需要,在项目中,我们的做法是使用 NLog 将日志写入本地,然后通过 Kafka 将日志发送到 ES,剩下的就是怎么对日志进行挖掘、展示的问题了。如果需要进行扩展,就需要自行安装其它工具对日志进行操作了;实际上,通过这一系列的操作,你需要用到的是 NLog+Kafka+ELK,这一系列高度灵活的框架都需要手动安装和调试,这个过程让小白窒息,让老司机迷路。家里的领导常说,能一行代码解决的问题,就不要搞那么复杂,高扩展性是很重要,但是易用性也是非常的重要的。

那么,TomatoLog 就是来解决这个问题,TomatoLog 对日志的处理不敢说强大,但可能是 .NETCore 平台上最简单易用的日志集成组件,具有高度灵活的使用方式,完全可定义配置的可扩展性,使用异步写入,业务完全解耦,客户端的一键安装、一行代码上传日志,目前 TomatoLog 没有实现登录验证,需要注意使用环境访问权限问题。下面就使用和功能进行展开介绍。

1.1 TomatoLog 的系统架构

千言万语不如一张图

从图中可以看出,TomatoLog 包含三个基础组件,他们分别是:客户端、数据流控制器、服务器;TomatoLog 本身不做存储优化,其通过定义一个简单的数据流协议实现日志的收集到存储,这个数据流协议在系统中被定义成为一个实体对象模型 LogMessage,位于程序集 TomatoLog.Common.dll 中:

namespace TomatoLog.Common.Utilities
{
    public class LogMessage
    {
        public int EventId { get; set; }
        public string ProjectName { get; set; }
        public string ProjectLabel { get; set; }
        public LogLevel LogLevel { get; set; }
        public string Version { get; set; }
        public string IP { get; set; }
        public string[] IPList { get; set; }
        public string MachineName { get; set; }
        public string ThreadId { get; set; }
        public string ProcessId { get; set; }
        public string ProcessName { get; set; }
        public DateTime Timestamp { get; set; }
        public string UserName { get; set; }
        public string ErrorMessage { get; set; }
        public string StackTrace { get; set; }
        public object Extra { get; set; }
    }
}

上面的所有字段都可以使用配置进行跟踪,可选择将哪些信息写入到日志中,其中,关于服务器主机信息,客户端会自动采集主机信息,无需手动传入,如果这些信息还是不能满足业务需要,没关系,上面的实体类中还定义了扩展字段 "Extra" ,该字段接收一切对象,当然,最好就是使用 Json 对象,这也比较科学。

服务端在接收到日志信息后,将会根据服务配置对日志进行清洗、筛选、然后是存入指定存储介质中,如果日志触发了服务配置的警报,服务器还将自动发送警报通知。下面,就从使用开始,体验 TomatoLog 带来的便利性和舒适的日志操作体验。

2. 部署日志采集服务器

TomatoLog 日志服务器目前发布的版本是:1.0.2(目前处于起步阶段,版本迭代速度可能比较快),位于:https://github.com/lianggx/TomatoLog/releases,直接下载 TomatoLog-1.0.2.zip,解压,得到文件如下:

此压缩包仅包含程序运行所必须文件,所以必须要在目标机器上安装 .NETCore SDK 2.2+,你可以简单的使用命令行或者其它你熟悉的托管程序去启动 TomatoLog.Server ,比如可以使用 IIS、Supervisord、Docker(需要自行打包); 在本示例中,我选择使用命令行启动它。

在上面文件夹中,我们在第一次使用的使用,只需要关注两个文件即可,他们分别是 appsettings.(Development/Production).json (服务配置文件)和 TomatoLog.Server.dll (服务主程序文件),首先,看看服务配置文件

2.1 服务器配置
{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "TomatoLog": {
    "Cache-Redis": null,
    "Config": {
      "SysConfig": "Config/SysConfig.json",
      "ProConfig": "Config/ProConfig.json"
    },
    "Storage": {
      "Type": "ToFile", //ToFile/ToES/ToMongoDB
      "File": "D:\\Tomato
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇进行API开发选gRPC还是HTTP APIs? 下一篇【C#】【对象转XML】xml序列化

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目