ABP VNext + SeriLog 的日志机制
**
ABP VNext 的日志机制
**
正用ABP VNext做个系统,由于框架默认带来日志处理机制,开发阶段基本能用,也一直没有去动它,快要上线了,思考了一下正式环境的日志管理流程,由于系统不大,预计访问量可能也不大,但默认的日志管理太简单,不便于后期日常维护。
缺点如下:
默认的日志只有单个文件,写上几天就变得很大,起不到检索的功能
默认代码没有把日志放在配置文件中,如果要修改日志的配置得改代码。
**
ABP VNext 的日志
**
为了解决以上两个缺点,就开始研究一下ABP VNext的日志。先翻一下ABP VNext的文档,日志有专门的菜单哦。
再看看代码:
感觉不太对,虽然没有用过SeriLog,但这几个字还是认识的好吧。
那我们OK,百度一下SeriLog 链接如下:
https://github.com/serilog/serilog/wiki/Getting-Started
这下看上去和现有代码差的不远了,就是他了
**
SeriLog
**
知道了是用的SeriLog,就直接看SeriLog来解决这两个问题
默认的代码是这样的:
在program.cs的Main方法中
Log.Logger = new LoggerConfiguration()
#if DEBUG
.MinimumLevel.Debug()
#else
.MinimumLevel.Information()
#endif
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Async(c => c.File("Logs/logs.txt"))
.CreateLogger();
1
2
3
4
5
6
7
8
9
10
**
滚动策略
**
默认代码就往一个logs.txt的文件里持续写日志,文件会越来越大,大到打开文件都困难。
当然,文档上说文件最大默认是1G
我的日志还没有那么大,所以不知道是不是有效,但1G的txt等于就是个垃圾了。
看下文档,https://github.com/serilog/serilog-sinks-file
可以给文件加滚动策略,比如:按时间间隔生成多个文件,或按照大小限制来分割文件。
**
配置文件
**
APB VNext的默认代码没有引用配置文件,其实这也不是什么大问题,因为这些配置可能永远都不会改,但万一哪天需要在生产环境重现或跟踪某个问题,为了降低或升高日志记录级别这么个小事,就得修改代码,还要发布站点,这可能会带来很多不必要和意想不到的麻烦,所以还不如多花一小点时间把这地方做好。
还是在上的文档中,有给出引用配置文件的方式,可以把配置信息放在appsetting.json中。
https://github.com/serilog/serilog-sinks-file
var configuration = new ConfigurationBuilder()
#if DEBUG
.AddJsonFile("appsettings.Development.json")
#else
.AddJsonFile("appsettings.json")
#endif
.Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
1
2
3
4
5
6
7
8
9
10
这里我加了条件编译,为了在debug和发布后引用不同的配置文件。
配置文件的内容可以按照文档来写。
{
"Serilog": {
"WriteTo": [
{ "Name": "File", "Args": { "path": "log.txt", "rollingInterval": "Day" } }
]
}
}
1
2
3
4
5
6
7
上面的文档中有简单的例子,要用到更复杂的属性,可以看这个文档:
https://github.com/serilog/serilog-settings-configuration
**
异步写文件
**
默认的代码中用的是异步写入日志的方法,这也可以在配置文件中配置。
"Serilog": {
"MinimumLevel": "Debug",
"WriteTo": [
{
"Name": "Async",
"Args": {
"configure": [
{
"Name": "File",
"Args": {
"path": "Logs/logs.txt",
"rollingInterval": "Day",
"retainedFileCountLimit": null
}
}
]
}
}
]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
详细的见文档:https://github.com/serilog/serilog-sinks-async
**
其他
**
除了把日志写入文件,SeriLog还支持其他的媒介,有需要也可以试试。
见此文档:https://github.com/serilog/serilog/wiki/Provided-Sinks
————————————————
版权声明:本文为****博主「@9211」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.****.net/weixin_44277627/article/details/128613757
原文地址:https://www.cnblogs.com/wl-blog/p/17262542.html
推荐阅读
-
ABP VNext + SeriLog 的日志机制
-
Net8 ABP VNext 与 FreeSql、SqlSugar 的集成
-
深入理解Logback的异步日志记录机制
-
Abp vNext真的被高估了吗?事实的真相究竟为何...?
-
玩转Java底层:JMX详解 - jconsole与自定义MBean监控工具的实际应用与区别" 在日常JVM调优中,我们熟知的jconsole工具通过JMX包装的bean以图形化形式展示管理数据,而像jstat和jmap这类内建监控工具则由JVM直接支持。本文将以jconsole为例,深入讲解其实质——基于JMX的MBean功能,包括可视化界面上的bean属性查看和操作调用。 MBeans在jconsole中的体现是那些可观察的组件属性和方法,如上图所示,通过名为"Verbose"的属性能看到其值为false,同时还能直接操作该bean的方法,例如"closeJerryMBean"。 尽管jconsole给我们提供了直观的可视化界面,但请注意,这里的MBean并非固定不变,开发者可根据JMX提供的接口将自己的自定义bean展示到jconsole。以下步骤展示了如何创建并注册一个名为"StudyJavaMBean"的自定义MBean: 1. 首先定义接口`StudyJavaMBean`,接口需遵循MBean规范,即后缀为"MBean"且包含getter方法代表属性,如`getApplicationName`,和无返回值的setter方法代表操作,如`closeJerryMBean`。 ```java public interface StudyJavaMBean { String getApplicationName(); void closeJerryMBean(); } ``` 2. 编写接口的实现类`StudyJavaMBeanImpl`,实现接口中的方法: ```java public class StudyJavaMBeanImpl implements StudyJavaMBean { @Override public String getApplicationName() { return "每天学Java"; } @Override public void closeJerryMBean() { System.out.println("关闭Jerry应用"); } } ``` 3. 在代码中注册自定义MBean,涉及的关键步骤包括: - 获取平台MBeanServer - 定义ObjectName,指定唯一的MBean标识符 - 注册MBean到服务器 - 启动RMI连接器服务,以便jconsole能够访问 ```java public void registerMBean() throws Exception { // ... 具体实现省略 ... } ``` 实际运行注册后的MBean,您将在jconsole中发现并查看自定义bean的属性和调用相关方法。然而,这种方式相较于传统的属性/日志查看和HTTP接口,实用性相对有限,可能存在潜在的安全风险。但不可否认的是,JMX及其MBean机制对于获取操作系统信息、内存状态等关键性能指标仍然具有重要价值。例如: 1. **获取操作系统信息**:通过JMX MBean,可以直接获取到诸如CPU使用率、操作系统版本等系统级信息,这对于资源管理和优化工作具有显著帮助。
-
必看!.NetCore开发者最爱的框架:Bridge (Abp-VNext+Vue3)
-
实现接口返回值的统一性在 Abp Vnext 中