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

使用客户端

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

Install-Package TomatoLog.Client.Redis
Install-Package TomatoLog.Client.RabbitMQ
Install-Package TomatoLog.Client.Kafka

TomatoLog客户端配置文件 appsetting.json

{
"TomatoLog": {
"LogLevel": "Information",
"ProjectLabel": "Example",
"ProjectName": "Example",
"SysOptions": {
"EventId": true,
"IP": true,
"IPList": true,
"MachineName": true,
"ProcessId": true,
"ProcessName": true,
"ThreadId": true,
"Timestamp": true,
"UserName": true
},
"Tags": null,
"Version": "1.0.0",
"Exchange": "TomatoLog-Exchange",
"ExchangeType": "direct",
"Host": "127.0.0.1",
"Password": "123456",
"Port": 5672,
"QueueName": "TomatoLog-Queue",
"RouteKey": "All",
"UserName": "lgx",
"vHost": "TomatoLog"
}
}

服务注入

public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<ITomatoLogClient>(factory =>
{
var options = this.Configuration.GetSection("TomatoLog").Get<EventRabbitMQOptions>();
var client = new TomatoLogClientRabbitMQ(options); return client;
});
...
}

配置启用

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory factory, ITomatoLogClient logClient)
{
factory.UseTomatoLogger(logClient);
...
}

使用 TomatoLogClient

[Route("api/[controller]")]
[ApiController]
public class HomeController : ControllerBase
{
private readonly ITomatoLogClient logClient;
private readonly ILogger logger;
public HomeController(ILogger<HomeController> logger, ITomatoLogClient logClient)
{
this.logger = logger;
this.logClient = logClient;
} [HttpGet]
public async Task<ActionResult<IEnumerable<string>>> Get()
{
// Used by ILogger
this.logger.LogError("测试出错了"); // Used By ITomatoLogClient
try
{
await this.logClient.WriteLogAsync(1029, LogLevel.Warning, "Warning Infomation", "Warning Content", new { LastTime = DateTime.Now, Tips = "Warning" });
throw new NotSupportedException("NotSupported Media Type");
}
catch (Exception ex)
{
await ex.AddTomatoLogAsync();
} return new string[] { "value1", "value2" };
}
}

部署服务端

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

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

编辑服务端配置文件

{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
},
"TomatoLog": {
"Cache-Redis": null, // 过滤器会使用该分布式缓存进行策略考量,如果有配置
"Config": {
"SysConfig": "Config/SysConfig.json" // 系统配置文件,可通过Web控制台进行配置
},
"Storage": {
"Type": "ToFile", //ToFile/ToES/ToMongoDB 可以选择的存储方式
"File": "D:\\TomatoLog\\Storage", // 如果Type选择了 ToFile ,则这里必须指定绝对路径
"ES": "http://127.0.0.1:9200/", // 如果Type选择了ToES,这里必须配置 Elasticsearch 服务地址
"MongoDB": "mongodb://root:root@127.0.0.1:27017/admin" //如果Type选择了ToMongoDB,这里必须配置 ToMongoDB 数据库链接
},
"Flow": {
"Type": "RabbitMQ", // Redis/RabbitMQ/Kafaka 这里指定客户端和服务器的传输管道类型,两端配置必须一致
"Redis": {
"Connection": null,
"Channel": "TomatoLogChannel"
},
"RabbitMQ": { // 如果使用了 RabbitMQ,则必须配置该节点
"Host": "127.0.0.1",
"Port": 5672,
"UserName": "root",
"Password": "123456",
"vHost": "TomatoLog",
"Exchange": "TomatoLog-Exchange",
"ExchangeType": "direct",
"QueueName": "TomatoLog-Queue",
"RouteKey": "All",
"Channels": 1 // 运行的消息队列实例数量
},
"Kafka": {
"Group": "TomatoLogServer",
"BootstrapServers": "127.0.0.1:9092",
"Topic": "TomatoLog"
}
}
}
}

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

在浏览器中打开地址: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. Excel催化剂开源第25波-Excel调用百度AI,返回AI结果

    现成的这些轮子,无需调用网页,直接本地离线即可生成). 当然在AI时代,少不了各种AI接口的使用场景,普通开发者只需聚焦在自己的业务场景上,这些AI底层技术,只需类似水煤电一般去BAT这些大厂那里去消 ...

  2. Android之无限轮播图源代码

    Android轮播广告图是大家经常用到的一个控件今天便撸了一把代码 实现步骤 使用Viewpager进行实现图片滑动 设置ViewPager的数据,让其无限切换 Activity代码 public c ...

  3. Spark Week1 HomeWork

    package wikipedia import org.apache.spark.SparkConf import org.apache.spark.SparkContext import org. ...

  4. .NetCore下ES查询驱动 PlainElastic .Net 升级官方驱动 Elasticsearch .Net

    1.背景 由于历史原因,笔者所在的公司原有的ES查询驱动采用的是 PlainElastic.Net, 经过询问原来是之前PlainElastic.Net在园子里文档较多,上手比较容易,所以最初作者选用 ...

  5. Kotlin学习快速入门(2)——条件 数组 循环 方法

    条件 if条件判断 常用的判断和Java一样,这里提一下不同的用法 1.if可以作为三元运算符 val max = if (a > b) a else b 2.使用in判断是否在某个区间 val ...

  6. T-SQL 日期

    --日期查询格式 ) --R:06/17/2011 ) --R:2011.06.17 ) --R:17/06/2011 ) --R:17.06.2011 ) --R:17-06-2011 ) --R: ...

  7. 角度转弧度&根据弧度计算圆周上点的坐标的方法

    角度转弧度: #define AngleToRadian(angle) (M_PI/180.0f)*angle 以正东面为0度起点计算指定角度所对应的圆周上的点的坐标: float radian = ...

  8. Model设计中常见的技巧和注意事项

    verbose_name 可以作为第一个参数传入,书写更加工整和有序: name = models.CharField('类别名',default="", max_length=3 ...

  9. 极力推荐一个简单好用的C++JSON库

      极力推荐一个简单好用的C++JSON库CJsonObject,让使用json如使用C++原生的结构体那般方便,随心所欲.CJsonObject是个优秀的C++JSON库,也许会是你见过的最为简单易 ...

  10. GridView 使用详解

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