.NetCore 中扩展ExceptionLess 实现链式方法添加操作日志
在使用ExceptionLess添加日志的时候,发现还是有一些写法上的个人觉得不爽的地方,比如添加Info日志
ExceptionlessClient.Default.CreateLog(source, message, LogLevel.Info).AddTags(tags.ToArray()).Submit();
如果使用自己的添加方法可能是下面这样的
public void Info(string source, string message, params string[] tags)
{
ExceptionlessClient.Default.CreateLog(source, message, LogLevel.Info).AddTags(tags).Submit();
}
一旦Tags多了前面写的时候前面出现太多的字符串参数看上去不太友好
所以下面我对ExceptionLess进行了扩展,在原有的接口实现上扩展了一个IELLogExtensions
public static class IELLogExtensions
{ public static IELLog AddSource(this IELLog eLLog,string source)
{
eLLog.Source(source);
return eLLog;
}
public static IELLog AddMessage(this IELLog eLLog, string message)
{
eLLog.Message(message);
return eLLog;
}
public static IELLog AddTag(this IELLog eLLog, string tag)
{
eLLog.Tags(tag);
return eLLog;
}
public static IELLog AddSubmitInfo(this IELLog eLLog)
{
eLLog.SubmitInfo();
return eLLog;
} public static IELLog AddSubmitError(this IELLog eLLog)
{
eLLog.SubmitError();
return eLLog;
} public static IELLog AddSubmitDebug(this IELLog eLLog)
{
eLLog.SubmitDebug();
return eLLog;
}
public static IELLog AddSubmitTrace(this IELLog eLLog)
{
eLLog.SubmitTrace();
return eLLog;
}
public static IELLog AddSubmitWarn(this IELLog eLLog)
{
eLLog.SubmitWarn();
return eLLog;
} }
在将原来的接口实现修改成下面的方式 IELLog
public interface IELLog
{ void Source(string source);
void Message(string message);
void Tags(string tag);
void SubmitInfo();
void SubmitError(); void SubmitDebug();
void SubmitTrace();
void SubmitWarn();
}
实现下这些具体操作,定义了一些用来装载信息的容器 如source 、message 、tags
public class ExceptionlessLogService : IELLog
{ private string source { get; set; }
private string message { get; set; }
private List<string> tags = new List<string>();
private readonly ExceptionLessConfig exceptionLessConfig;
public ExceptionlessLogService(IOptions<ExceptionLessConfig> options)
{
exceptionLessConfig = options.Value;
} public void Source(string source) {
this.source = source;
}
public void Message(string message) {
this.message = message;
}
public void Tags(string tag) { tags.Add(tag);
}
public void SubmitInfo()
{
ExceptionlessClient.Default.CreateLog(source, message, LogLevel.Info).AddTags(tags.ToArray()).Submit(); }
public void SubmitError()
{
ExceptionlessClient.Default.CreateLog(source, message, LogLevel.Error).AddTags(tags.ToArray()).Submit(); }
public void SubmitDebug()
{
ExceptionlessClient.Default.CreateLog(source, message, LogLevel.Debug).AddTags(tags.ToArray()).Submit(); } public void SubmitTrace()
{
ExceptionlessClient.Default.CreateLog(source, message, LogLevel.Trace).AddTags(tags.ToArray()).Submit(); } public void SubmitWarn()
{
ExceptionlessClient.Default.CreateLog(source, message, LogLevel.Warn).AddTags(tags.ToArray()).Submit(); }
}
下面使用这些扩展日志的时候了,来看看写法上有什么不一样,如下看起来很简洁清晰
_eLLog.AddSource("Title")
.AddMessage("内容")
.AddTag("tag1")
.AddTag("tag2")
.AddTag("tag3")
.AddTag("tag4")
.AddSubmitInfo();
.NetCore 中扩展ExceptionLess 实现链式方法添加操作日志的更多相关文章
- C#中扩展StringBuilder支持链式方法
本篇体验扩展StringBuilder使之支持链式方法. 这里有一个根据键值集合生成select元素的方法. private static string BuilderSelectBox(IDicti ...
- 简谈 JavaScript、Java 中链式方法调用大致实现原理
相信,在 JavaScript .C# 中都见过不少链式方法调用,那么,其中实现该类链式调用原理,大家有没有仔细思考过?其中 JavaScript 类库:jQuery 中就存在大量例子,而在 C# 中 ...
- C#用链式方法表达循环嵌套
情节故事得有情节,不喜欢情节的朋友可看第1版代码,然后直接跳至“三.想要链式写法” 一.起缘 故事缘于一位朋友的一道题: 朋友四人玩LOL游戏.第一局,分别选择位置:中单,上单,ADC,辅助:第二局新 ...
- Java链式方法 连贯接口(fluent interface)
有两种情况可运用链式方法: 第一种 除最后一个方法外,每个方法都返回一个对象 object2 = object1.method1(); object3 = object2.method2(); ob ...
- C#用链式方法
C#用链式方法表达循环嵌套 情节故事得有情节,不喜欢情节的朋友可看第1版代码,然后直接跳至“三.想要链式写法” 一.起缘 故事缘于一位朋友的一道题: 朋友四人玩LOL游戏.第一局,分别选择位置:中 ...
- .NetCore中使用ExceptionLess 添加操作日志
上一篇文章已经扩展了日志,下面我们在结合下处理操作日志 通常我们想到操作日志 可能想到的参数可能有 模块 方法 参数内容 操作人 操作时间 操作 Ip 下面我们就来结合这些信息添加操作日志 如果要在代 ...
- Java链式方法
http://blog.csdn.net/lemon_shenzhen/article/details/6358537 有两种情况可运用链式方法: 第一种 除最后一个方法外,每个方法都返回一个对象 ...
- .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---先让程序跑起来(一)
原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---先让程序跑起来(一) 写下此文章只为了记录Surging微服务学习过程,并且分享给广大想学习surging的基友,方便广大 ...
- .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二)
原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 先上项目解决方案图: 以上可以看出项目结构可以划分为4大块,1是surging的核心底层,2,3,4都可以 ...
随机推荐
- kvm安装配置
操作系统版本:CentOS Linux release 7.5.1804 (Core) 内核版本:3.10.0-862.el7.x86_64 1.安装 安装以下软件.yum -y install qe ...
- 用css绘制图形
巧用css的border-radius属性,也能绘制出好看的图形 html部分 <!DOCTYPE html><html> <head> <meta char ...
- Django_博客项目 引入外部js文件内含模板语法无法正确获取值得说明和处理
问题描述 : 项目中若存在对一段js代码复用多次的时候, 通常将此段代码移动到一个单独的静态文件中在被使用的地方利用 script 标签的 src 属性进行外部调用 但是如果此文件中存在使用 HTML ...
- BZOJ 4173: 数学
4173: 数学 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 462 Solved: 227[Submit][Status][Discuss] D ...
- Problem C Dist 解题报告
Problem C Dist Description 有一个\(n\)个点带边权的连通无向图,边集用\(k\)个集合\(s_1,s_2,\dots,s_k\)和\(k\)个整数\(w_1,w_2,\d ...
- QeePHP View视图的默认变量与新增变量
新版本的QeePHP(V13.1)中,视图页面已经默认添加了几个常用变量 $_app; //控制器所属的应用程序 $_login_user; //登陆用户信息 直接在视图页面直接使用变量即可. 如果 ...
- Python中的requests模块注意事项
主要是说requests.post()方法, 参数: url : 这就不解释了 data: 如果传入的是字典类型,则字典在发出请求时会自动编码为表单形式,表单形式会将字典中的键和值进行一些操作: ...
- webpack进阶--打包
上一片博文主要让大家了解下究竟webpack是干什么的,明显它是专注于打包的. gulp 和 webpack 的区别 gulp,要求我们一步步写task(es6编译.css压缩.图片压缩.打包. ...
- javascript公有静态成员
公共静态成员在javascript中并没有特殊语法来表示静态成员.但是可以通过使用构造函数向其添加属性这种方式. //构造函数 var Gadget = function(){}; //静态方法 Ga ...
- 【两分钟教程】如何更改Xcode项目名称
注意:视频在最后,还少了一个步骤:将Xcode中的名字叫做<企信通>的虚拟文件夹删掉,然后重新从硬盘中添加进来,这样就彻底完成了更改Xcode项目名称的目的.