TomatoLog

TomatoLog 是一个基于 .NETCore 平台的产品。

The TomatoLog 是一个中间件,包含客户端、服务端,非常容易使用和部署。

客户端实现了ILoggerFactory,使用服务注入成功后即可使用,对业务入侵非常小,也支持通过客户端调用写入日志流。

TomatoLog 的客户端和服务端目前都是基于 .NETCore 版本,客户端提供了三种日志流传输方式,目前实现了 Redis/RabbitMQ/Kafka 流。如果希望使用非 .NETCore 平台的客户端,你可以自己开放其它第三方语言的客户端,通过实现 TomatoLog 传输协议,将数据传送到管道(Redis/RabbitMQ/Kafka)中即可。

TomatoLog 服务端还提供了三种存储日志的方式,分别是 File、MongoDB、Elasticsearch,存储方式可以通过配置文件指定。在 TomatoLog 服务端,我们还提供了一个Web 控制台,通过该控制台,可以对日志进行查询、搜索,对服务过滤器进行配置,警报配置、通知发送等等,其中,可使用的警报通知方式有:SMS 和 Email 两种方式,但是,SMS 其本质是一个 Http 请求,通过 SMS 的配置,可以实现向所有提供了 Http 接口的网关发送通知。

TomatoLog 系统架构

Get Started

使用客户端

选择安装以下客户端中的任意一项

  1. Install-Package TomatoLog.Client.Redis
  2. Install-Package TomatoLog.Client.RabbitMQ
  3. Install-Package TomatoLog.Client.Kafka

TomatoLog客户端配置文件 appsetting.json

  1. {
  2. "TomatoLog": {
  3. "LogLevel": "Information",
  4. "ProjectLabel": "Example",
  5. "ProjectName": "Example",
  6. "SysOptions": {
  7. "EventId": true,
  8. "IP": true,
  9. "IPList": true,
  10. "MachineName": true,
  11. "ProcessId": true,
  12. "ProcessName": true,
  13. "ThreadId": true,
  14. "Timestamp": true,
  15. "UserName": true
  16. },
  17. "Tags": null,
  18. "Version": "1.0.0",
  19. "Exchange": "TomatoLog-Exchange",
  20. "ExchangeType": "direct",
  21. "Host": "127.0.0.1",
  22. "Password": "123456",
  23. "Port": 5672,
  24. "QueueName": "TomatoLog-Queue",
  25. "RouteKey": "All",
  26. "UserName": "lgx",
  27. "vHost": "TomatoLog"
  28. }
  29. }

服务注入

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddSingleton<ITomatoLogClient>(factory =>
  4. {
  5. var options = this.Configuration.GetSection("TomatoLog").Get<EventRabbitMQOptions>();
  6. var client = new TomatoLogClientRabbitMQ(options);
  7. return client;
  8. });
  9. ...
  10. }

配置启用

  1. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory factory, ITomatoLogClient logClient)
  2. {
  3. factory.UseTomatoLogger(logClient);
  4. ...
  5. }

使用 TomatoLogClient

  1. [Route("api/[controller]")]
  2. [ApiController]
  3. public class HomeController : ControllerBase
  4. {
  5. private readonly ITomatoLogClient logClient;
  6. private readonly ILogger logger;
  7. public HomeController(ILogger<HomeController> logger, ITomatoLogClient logClient)
  8. {
  9. this.logger = logger;
  10. this.logClient = logClient;
  11. }
  12. [HttpGet]
  13. public async Task<ActionResult<IEnumerable<string>>> Get()
  14. {
  15. // Used by ILogger
  16. this.logger.LogError("测试出错了");
  17. // Used By ITomatoLogClient
  18. try
  19. {
  20. await this.logClient.WriteLogAsync(1029, LogLevel.Warning, "Warning Infomation", "Warning Content", new { LastTime = DateTime.Now, Tips = "Warning" });
  21. throw new NotSupportedException("NotSupported Media Type");
  22. }
  23. catch (Exception ex)
  24. {
  25. await ex.AddTomatoLogAsync();
  26. }
  27. return new string[] { "value1", "value2" };
  28. }
  29. }

部署服务端

首先,下载服务端压缩包文件 版本预览 ,该压缩包仅包含项目运行必需文件,托管该服务端的服务器上必须按照 DotNET Core SDK 2.2+

接下来,解压文件,修改 appsetting.Environment.json 文件将服务器进行配置,将配置好的服务端部署到你的服务器上,可以为 TomatoLog 选择 IIS 或者其它托管方式,服务端默认运行端口为:20272.

编辑服务端配置文件

  1. {
  2. "Logging": {
  3. "IncludeScopes": false,
  4. "LogLevel": {
  5. "Default": "Debug",
  6. "System": "Information",
  7. "Microsoft": "Information"
  8. }
  9. },
  10. "TomatoLog": {
  11. "Cache-Redis": null, // 过滤器会使用该分布式缓存进行策略考量,如果有配置
  12. "Config": {
  13. "SysConfig": "Config/SysConfig.json" // 系统配置文件,可通过Web控制台进行配置
  14. },
  15. "Storage": {
  16. "Type": "ToFile", //ToFile/ToES/ToMongoDB 可以选择的存储方式
  17. "File": "D:\\TomatoLog\\Storage", // 如果Type选择了 ToFile ,则这里必须指定绝对路径
  18. "ES": "http://127.0.0.1:9200/", // 如果Type选择了ToES,这里必须配置 Elasticsearch 服务地址
  19. "MongoDB": "mongodb://root:root@127.0.0.1:27017/admin" //如果Type选择了ToMongoDB,这里必须配置 ToMongoDB 数据库链接
  20. },
  21. "Flow": {
  22. "Type": "RabbitMQ", // Redis/RabbitMQ/Kafaka 这里指定客户端和服务器的传输管道类型,两端配置必须一致
  23. "Redis": {
  24. "Connection": null,
  25. "Channel": "TomatoLogChannel"
  26. },
  27. "RabbitMQ": { // 如果使用了 RabbitMQ,则必须配置该节点
  28. "Host": "127.0.0.1",
  29. "Port": 5672,
  30. "UserName": "root",
  31. "Password": "123456",
  32. "vHost": "TomatoLog",
  33. "Exchange": "TomatoLog-Exchange",
  34. "ExchangeType": "direct",
  35. "QueueName": "TomatoLog-Queue",
  36. "RouteKey": "All",
  37. "Channels": 1 // 运行的消息队列实例数量
  38. },
  39. "Kafka": {
  40. "Group": "TomatoLogServer",
  41. "BootstrapServers": "127.0.0.1:9092",
  42. "Topic": "TomatoLog"
  43. }
  44. }
  45. }
  46. }

番茄日志服务端控制台长什么样

在浏览器中打开地址:http://localhost:20272/

首页看日志列表

日志详情、弹出查看详情、日志搜索、支持ES/MongoDB/File搜索

全局日志处理、警报配置

针对单个项目的详细日志处理、警报配置

一次打包,到处运行

不管是从项目结构还是解决方案,我都强调简单就是最美的根本要求,解决方案的内容虽然看起来很多,但是你也只需要按需引用其中一个客户端就可以了,服务端更是如此,全站都打包在一个 .NETCore 的应用程序中,程序的警报配置都是存储在配置文件中的,无需数据库支持。

TomatoLog-1.1.0实现ILoggerFactory的更多相关文章

  1. ZAM 3D 制作简单的3D字幕 流程(二)

    原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表述仅为本人理解,若有偏差和错误请指正! 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇 ...

  2. ZAM 3D 制作3D动画字幕 用于Xaml导出

    原地址-> http://www.cnblogs.com/yk250/p/5662788.html 介绍:对经常使用Blend做动画的人来说,ZAM 3D 也很好上手,专业制作3D素材的XAML ...

  3. 微信小程序省市区选择器对接数据库

    前言,小程序本身是带有地区选着器的(网站:https://mp.weixin.qq.com/debug/wxadoc/dev/component/picker.html),由于自己开发的程序的数据是很 ...

  4. osg编译日志

    1>------ 已启动全部重新生成: 项目: ZERO_CHECK, 配置: Debug x64 ------1> Checking Build System1> CMake do ...

  5. TomatoLog 是一个基于 .NETCore 平台的产品。

    TomatoLog TomatoLog 是一个基于 .NETCore 平台的产品. The TomatoLog 是一个中间件,包含客户端.服务端,非常容易使用和部署. 客户端实现了ILoggerFac ...

  6. ASP.NET Core 1.0 开发记录

    官方资料: https://github.com/dotnet/core https://docs.microsoft.com/en-us/aspnet/core https://docs.micro ...

  7. Asp.Net Core 项目实战之权限管理系统(0) 无中生有

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  8. IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API

    IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...

  9. [转]Writing Custom Middleware in ASP.NET Core 1.0

    本文转自:https://www.exceptionnotfound.net/writing-custom-middleware-in-asp-net-core-1-0/ One of the new ...

随机推荐

  1. String 的成员函数

    本篇是把一些string的成员函数的用法记录下来 size()函数和lenth()函数 s.size()或者s.lenth() 它们都会返回长度,是总长度而不是下标长度 find函数 s.find(s ...

  2. [剑指offer] 10. 旋转数组的最小数字

    题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 思路: 利用dp[i]保存盖2*i的矩形有多少种办法. 通过 ...

  3. 微信小程序post 服务端无法获得参数问题

    header中需要改为 "Content-Type": "application/x-www-form-urlencoded"

  4. jsp定义全局变量:读取properties文件

    <%java.util.Properties prop = new java.util.Properties();java.io.InputStream in;in = getClass().g ...

  5. python带有GIL解释器锁

    1.GIL是什么?GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定. 2.每个CPU在同一时间只能执行一个线程(在 ...

  6. npm常用命令(原创)

    1.对于我们下载下来的node包,假设该包存在依赖情况执行: npm install(或者npm i) 下载依赖包: 下载依赖成功过后,文件夹内会产生package-lock.json文件: 2.下载 ...

  7. vmware15pro安装ubuntu18.10时出现显示不全问题

    如果这个时候用网上的ALT+左键拖拽根本没有效果 所以这里提供另外一种方式 就是正常安装的时候发现分区部分显示不全 此时点击右上角的橙色小×:询问是否退出 我们点击退出:之后就会来到试用界面 到了这里 ...

  8. Linux基础管道管理

    一.I/O重定向 标准输入,标准输出,标准错误 file descriptors (FD, 文件描述符或Process I/O channels); 进程使用文件描述符来管理打开的文件 [root@l ...

  9. Permission 使用详解

    极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以 ...

  10. jquery EasyUi 添加节点、展开所有节点、默认选中第一个节点

    感觉easyUi 的树用起来不如 Ext 的树方便,首先,root节点不太好自定义, 异步加载时,只能通过后台判断生成root节点,但是这样一来有一个问题,就是第一次访问界面时, 树的初始化比较慢,大 ...