TomatoLog-1.1.0实现ILoggerFactory
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的更多相关文章
- ZAM 3D 制作简单的3D字幕 流程(二)
原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表述仅为本人理解,若有偏差和错误请指正! 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇 ...
- ZAM 3D 制作3D动画字幕 用于Xaml导出
原地址-> http://www.cnblogs.com/yk250/p/5662788.html 介绍:对经常使用Blend做动画的人来说,ZAM 3D 也很好上手,专业制作3D素材的XAML ...
- 微信小程序省市区选择器对接数据库
前言,小程序本身是带有地区选着器的(网站:https://mp.weixin.qq.com/debug/wxadoc/dev/component/picker.html),由于自己开发的程序的数据是很 ...
- osg编译日志
1>------ 已启动全部重新生成: 项目: ZERO_CHECK, 配置: Debug x64 ------1> Checking Build System1> CMake do ...
- TomatoLog 是一个基于 .NETCore 平台的产品。
TomatoLog TomatoLog 是一个基于 .NETCore 平台的产品. The TomatoLog 是一个中间件,包含客户端.服务端,非常容易使用和部署. 客户端实现了ILoggerFac ...
- ASP.NET Core 1.0 开发记录
官方资料: https://github.com/dotnet/core https://docs.microsoft.com/en-us/aspnet/core https://docs.micro ...
- Asp.Net Core 项目实战之权限管理系统(0) 无中生有
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...
- [转]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 ...
随机推荐
- Spring集成Shiro使用小结
shiro的认证流程 Application Code:应用程序代码,由开发人员负责开发的 Subject:框架提供的接口,代表当前用户对象 SecurityManager:框架提供的接口,代表安全管 ...
- C#3.0新增功能10 表达式树 03 支持表达式树的框架类型
连载目录 [已更新最新开发文章,点击查看详细] 存在可与表达式树配合使用的 .NET Core framework 中的类的大型列表. 可以在 System.Linq.Expressions 查 ...
- fjnu2016-2017 低程 PROBLEM B 捧杯
#include <iostream>#include <cmath>using namespace std; int _gcd(int x,int y){ return y= ...
- 如何更换织梦cms系统的网站小图标
织梦cms建站现在已经是很普遍的建站方式了,下面小编就分享一个简单的换网站小图标的方法! 一.登录自己网站的后台管理系统.在不修改织梦后台的情况下,默认的url是自己的网站后台dede目录下访问. 二 ...
- python课堂整理15---map, filter,reduce函数
一.map函数 处理序列(可迭代对象)中的每一个元素,得到的结果是一个‘列表’(其实是个迭代器),该‘列表’元素个数及位置与原来一样 理解下面这段代码: num_l = [1, 2, 4, 6] de ...
- javascript获取指定区间范围随机数
//获取指定区间范围随机数,包括lowerValue和upperValuefunction randomFrom(lowerValue,upperValue){ return Math.floo ...
- DH、RSA与ElGamal非对称加密算法实现及应用
1.对称加密与非对称加密概述 关于对称加密与非对称加密的概念这里不再多说,感兴趣可以看下我之前的几篇文章,下面说一说两者的主要区别. 对称加密算法数据安全,密钥管理复杂,密钥传递过程复杂,存在密钥泄露 ...
- 从原理层面掌握HandlerMethod、InvocableHandlerMethod、ServletInvocableHandlerMethod的使用【一起学Spring MVC】
每篇一句 想当火影的人没有近道可寻,当上火影的人同样无路可退 前言 HandlerMethod它作为Spring MVC的非公开API,可能绝大多数小伙伴都对它比较陌生,但我相信你对它又不是那么的生疏 ...
- UR机器人的位姿
一.Ur 移动命令 UR机器人移动,一共有三种移动指令,movej,movel,movep,分别是关节运动,线性运动,圆周运动. movej:6个关节的弧度 movel/movep:分别是x,y,z, ...
- HiveQL DDL 常用QL示例资料
hive-version2.1.1 DDL操作 Create/Drop/Alter/Use Database 创建数据库 //官方指导 CREATE (DATABASE|SCHEMA) [IF NOT ...