代码拉取完成,页面将自动刷新
ELK如果对于你来说太大,那么可以试试这个PasteLoggerBoard,一款使用.netcore(基于ABP基础框架搭建)编写的日志收集系统,快速集成于现有系统,采用Postgresql+redis+rabbitmq的方式,收集程序的日志并显示报表,状态通知(推送webhook)等!
.netcore6.0(EF)+postgresql(EF)+rabbitmq+redis 如果你使用其他数据库可以进行修改,首先需要你对EF有了解,会更改EF的数据库!
使用docker/podman正常安装即可,也可以使用PasteSpider(使用文档 https://soft.pastecode.cn/Home/Docs/spider/0 )进行快速部署(关键是后面自己改代码了,可以一键发布升级)!LoggerBoardManage文件夹里面的是前端文件,本系统采用前后端分离,如果要新增功能,建议安装PasteBuilder(使用文档 https://soft.pastecode.cn/Article/18 )代码生成器,这样可以快速的为新模块生成对应的代码!
参考demo.md文件,信息如下
<PackageReference Include="Serilog.AspNetCore" Version="7.0.0" />
<PackageReference Include="Serilog.Enrichers.ClientInfo" Version="2.0.3" />
<PackageReference Include="Serilog.Sinks.RabbitMQ" Version="6.0.0" />
Configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: false)
.AddEnvironmentVariables()
.Build();
var configlist = Configuration.AsEnumerable();
var result = configlist.Where(x => x.Key.StartsWith("SerilogRabbitConfig:")).ToDictionary(x => x.Key.Replace("SerilogRabbitConfig:", ""), x => x.Value);
if (result != null && result.Count > 0)
{
var _serilogConfig = Newtonsoft.Json.JsonConvert.DeserializeObject<RabbitConfig>(Newtonsoft.Json.JsonConvert.SerializeObject(result));
Log.Logger = new LoggerConfiguration()
.Enrich.WithClientIp()
.Enrich.WithRequestHeader("User-Agent","UserAgent")
.Enrich.WithProperty("AppName", _serilogConfig.ClientName)
.WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Error)
.WriteTo.RabbitMQ((client, Skin) =>
{
client.Username = _serilogConfig.UserName;
client.Password = _serilogConfig.Password;
client.Exchange = _serilogConfig.Exchange;
client.ExchangeType = _serilogConfig.ExchangeType;
client.Port = _serilogConfig.Port;
client.RouteKey = _serilogConfig.RouteKey;
client.VHost = _serilogConfig.VirtualHost;
client.DeliveryMode = (_serilogConfig.Durable ? RabbitMQDeliveryMode.Durable : RabbitMQDeliveryMode.NonDurable);
client.Hostnames.Add(_serilogConfig.HostName);
Skin.RestrictedToMinimumLevel = (LogEventLevel)_serilogConfig.LogLevel;
Skin.TextFormatter = new JsonFormatter();
})
.Enrich.FromLogContext()
.CreateLogger();
//需要本地记录的化,在上面添加一句 .ReadFrom.Configuration(Configuration)
}
else
{
Log.Logger = new LoggerConfiguration()
.Enrich.WithClientIp()
.ReadFrom.Configuration(Configuration)
.Enrich.FromLogContext()
.CreateLogger();
}
"SerilogRabbitConfig": {
"HostName": "172.20.20.20",
"Port": 8072,
"VirtualHost": "/",
"UserName": "loger",
"Password": "123456",
"Exchange": "serilog",
"ExchangeType": "topic", //direct直连模式 topic通配符模式
"QueueName": "serilog",
"LogLevel": 0,
"Durable": true,
"WatchKey": "log.*", //监听的时候使用*匹配一个词语 #匹配多个词语
"RouteKey": "log.serilog", //*匹配一个词语 #匹配多个词语 他们之间用.隔开 后续可以基于这个拆分消费者
"ClientName": "SmartTool",//最大字符16不支持_符号,表示服务名称,用于追踪代码所属应用
"MaxChannelCount": 2
},
1.查询小时报表的时候,可能缺失上一个小时和当前小时的数据,需要查询的时候手动从handler中调取,然后并入查询结果中
2.关于一些数据的回收问题,比如Information的数据,是保留3个月还是6个月,过期的数据的删除问题,不然一直增大!
3.关于日志消息json模块的查询问题,这个我看了下由于属性没几个,没做这一块的查询支持,其他的是支持的
4.关于应用appname,系统里面是按照appname拆分的,也就是说日志是按照appname分割的,那么就有登陆账号允许查看哪些应用的日志信息的问题这个没做过滤
5.目前写入了webhook的日志推送,比如某一个应用发生了error,则按照设定的webhook推送一条消息!这个消息的频率目前没有做限定,是否要做限定,限定的频率是多少等这里没有实现
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。