-
动手造轮子:写一个日志框架(2)
本站最新发布 C#从入门到精通
试听地址 https://www.xin3721.com/eschool/CSharpxin3721/
(ILogHelperLoggingEnricher enricher); /// <summary> /// Add logs filter /// </summary> /// <param name="filterFunc">filterFunc, logProviderType/categoryName/Exception, whether to write log</param> bool AddFilter(Func<Type, string, LogHelperLogLevel, Exception, bool> filterFunc); ///// <summary> ///// config period batching ///// </summary> ///// <param name="period">period</param> ///// <param name="batchSize">batchSize</param> //void PeriodBatchingConfig(TimeSpan period, int batchSize); /// <summary> /// Build for LogFactory /// </summary> /// <returns></returns> ILogHelperFactory Build(); }
试听地址 https://www.xin3721.com/eschool/CSharpxin3721/
(ILogHelperLoggingEnricher enricher); /// <summary> /// Add logs filter /// </summary> /// <param name="filterFunc">filterFunc, logProviderType/categoryName/Exception, whether to write log</param> bool AddFilter(Func<Type, string, LogHelperLogLevel, Exception, bool> filterFunc); ///// <summary> ///// config period batching ///// </summary> ///// <param name="period">period</param> ///// <param name="batchSize">batchSize</param> //void PeriodBatchingConfig(TimeSpan period, int batchSize); /// <summary> /// Build for LogFactory /// </summary> /// <returns></returns> ILogHelperFactory Build(); }
增加 logging 的配置:
public static class LogHelper { private static ILogHelperFactory LogFactory { get; private set; } = NullLogHelperFactory.Instance; public static void ConfigureLogging(Action<ILogHelperLoggingBuilder> configureAction) { var loggingBuilder = new LogHelperLoggingBuilder(); configureAction?.Invoke(loggingBuilder); LogFactory = loggingBuilder.Build(); } public static ILogHelperLogger GetLogger<T>() => LogFactory.GetLogger(typeof(T)); public static ILogHelperLogger GetLogger(Type type) => LogFactory.GetLogger(type); public static ILogHelperLogger GetLogger(string categoryName) { return LogFactory.CreateLogger(categoryName); } }
最后的使用方式:
internal class LoggingTest { private static readonly ILogHelperLogger Logger = LogHelper.GetLogger<LoggingTest>(); public static void MainTest() { var abc = "1233"; LogHelper.ConfigureLogging(builder => { builder .AddLog4Net() //.AddSerilog(loggerConfig => loggerConfig.WriteTo.Console()) .WithMinimumLevel(LogHelperLogLevel.Info) .WithFilter((category, level) => level > LogHelperLogLevel.Error && category.StartsWith("System")) .EnrichWithProperty("Entry0", ApplicationHelper.ApplicationName) .EnrichWithProperty("Entry1", ApplicationHelper.ApplicationName, e => e.LogLevel >= LogHelperLogLevel.Error)// 当 LogLevel 是 Error 及以上级别时才增加 Property ; }); Logger.Debug("12333 {abc}", abc); Logger.Trace("122334334"); Logger.Info($"122334334 {abc}"); Logger.Warn("12333, err:{err}", "hahaha"); Logger.Error("122334334"); Logger.Fatal("12333"); } }
More#
增加 LoggingEvent
还想做一个批量提交日志,如上面定义的 PeriodBatchingConfig
一样,批量同步到 Provider 但是实际使用下来,有些 provider 不支持设置日志的时间,时间是内部记录的,这样一来日志记录的时间就不准了,而且大多都不支持批量写日志,所以后面放弃了,但是如果只是用自己的扩展,不用 log4net 之类的外部的日志框架的话,我觉得还是可以做的,可以提高效率,目前主要用 Serilog
和 log4net
,暂时不更新了,就先这样吧
下一版本要解决的事情
-
ILogProvider
记录日志返回一个 Task 感觉有些鸡肋,没太大意义,后面再改一下吧 -
Serilog
的 Filter 是基于LogEvent
的,后面看是否需要改一下,基于 LogEvent 的话更简洁,而且可以根据 LogEvent 内的 Properties 做过滤,所以 AddFilter 的API 可以更新一下AddFilter(Func<LogHelperLoggingEvent, bool> filter)
Reference#
- https://github.com/serilog/serilog
- https://github.com/serilog/serilog-sinks-periodicbatching
- https://github.com/aspnet/Logging
- https://github.com/aspnet/Extensions/tree/master/src/Logging
- https://github.com/WeihanLi/WeihanLi.Common/tree/dev/src/WeihanLi.Common/Logging
作者: WeihanLi
栏目列表
最新更新
python数据库连接池技术总结
成人网站性能提升 20 倍之经验谈 [Python
python动态捕获异常
python 探测网站目录的GUI程序
python实现中文字符繁体和简体中文转换
Python服务器开发 -- 网络基础
python高性能编程方法一
使用python管理Cisco设备
python抓取google搜索结果
Python 自动备份SVN版本库并复制到远程主机
基于UDP的服务器端和客户端
再谈UDP和TCP
在socket编程中使用域名
网络数据传输时的大小端问题
socket编程实现文件传输功能
如何优雅地断开TCP连接?
图解TCP四次握手断开连接
详细分析TCP数据的传输过程
图解TCP数据报结构以及三次握手(非常详
TCP协议的粘包问题(数据的无边界性)
Excel数据导入到Sql server
SQL Server like 字段
SQL Server中的LEFT、RIGHT函数
sql server 安装出现需要sqlncli.msi文件,错误
SQL Server学习内容(一)
SQLServer执行大脚本文件时,提示“无法执
数据库敏捷版本控制之3个数据库策略
将select 转为json
SQL Server 创建索引(index)
GROUP BY中的WITH CUBE、WITH ROLLUP原理测试及