在使用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 实现链式方法添加操作日志的更多相关文章

  1. C#中扩展StringBuilder支持链式方法

    本篇体验扩展StringBuilder使之支持链式方法. 这里有一个根据键值集合生成select元素的方法. private static string BuilderSelectBox(IDicti ...

  2. 简谈 JavaScript、Java 中链式方法调用大致实现原理

    相信,在 JavaScript .C# 中都见过不少链式方法调用,那么,其中实现该类链式调用原理,大家有没有仔细思考过?其中 JavaScript 类库:jQuery 中就存在大量例子,而在 C# 中 ...

  3. C#用链式方法表达循环嵌套

    情节故事得有情节,不喜欢情节的朋友可看第1版代码,然后直接跳至“三.想要链式写法” 一.起缘 故事缘于一位朋友的一道题: 朋友四人玩LOL游戏.第一局,分别选择位置:中单,上单,ADC,辅助:第二局新 ...

  4. Java链式方法 连贯接口(fluent interface)

    有两种情况可运用链式方法: 第一种  除最后一个方法外,每个方法都返回一个对象 object2 = object1.method1(); object3 = object2.method2(); ob ...

  5. C#用链式方法

    C#用链式方法表达循环嵌套   情节故事得有情节,不喜欢情节的朋友可看第1版代码,然后直接跳至“三.想要链式写法” 一.起缘 故事缘于一位朋友的一道题: 朋友四人玩LOL游戏.第一局,分别选择位置:中 ...

  6. .NetCore中使用ExceptionLess 添加操作日志

    上一篇文章已经扩展了日志,下面我们在结合下处理操作日志 通常我们想到操作日志 可能想到的参数可能有 模块 方法 参数内容 操作人 操作时间 操作 Ip 下面我们就来结合这些信息添加操作日志 如果要在代 ...

  7. Java链式方法

    http://blog.csdn.net/lemon_shenzhen/article/details/6358537 有两种情况可运用链式方法: 第一种  除最后一个方法外,每个方法都返回一个对象 ...

  8. .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---先让程序跑起来(一)

    原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---先让程序跑起来(一) 写下此文章只为了记录Surging微服务学习过程,并且分享给广大想学习surging的基友,方便广大 ...

  9. .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二)

    原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 先上项目解决方案图: 以上可以看出项目结构可以划分为4大块,1是surging的核心底层,2,3,4都可以 ...

随机推荐

  1. Cucumber java + Webdriver(一)

    一.打开Eclipse,新建一个maven项目,打开pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xm ...

  2. MongoDB-管道与聚合(3)

    分组:$group()    db.集合.aggregate(       {$group: {_id:'$分组字段名', 显示字段:{$统计函数: '$统计字段'}}},     ) -- 统计男生 ...

  3. MySQL5.7 的编译安装

    转: 5.7的安装: https://www.insp.top/article/make-install-mysql-5-7 5.6的安装: https://www.chenyudong.com/ar ...

  4. 新版POI如何获取日期类型的cell的值

    使用POI读取Excel值的同学,一定为日期类型抓狂过! POI对单元格日期处理很弱,没有针对的类型,日期类型取出来的也是一个double值,所以同样作为数值类型.即使使用cell.setCellTy ...

  5. 各种蕴含算法思想的DP - 1

    study from: https://www.cnblogs.com/flashhu/p/9480669.html 1.前缀和 https://www.luogu.org/problemnew/sh ...

  6. 位运算的一种应用 和 hiho1516过河解题报告

    初始i=s 每次:i=(i-1) & s 直到i=0 etc.11000100000100000000 10000=10001 & 1100001000=01111 & 110 ...

  7. k8s pod的4种网络模式最佳实战(externalIPs )

    [k8s]k8s pod的4种网络模式最佳实战(externalIPs )       hostPort相当于docker run -p 8081:8080,不用创建svc,因此端口只在容器运行的vm ...

  8. Python 内置函数---map()

    描述 map() 实现对一个可迭代对象中的每一个元素都应用一个函数 将被传入的函数作用到一个可迭代对象的每一个元素上,并且返回了包含了所有这些函数调用结果的一个迭代器. 由于map期待传入一个函数并会 ...

  9. RESTful记录-RESTful介绍

    RESTful Web服务是基于REST架构的Web服务.在REST架构一切都是一种资源. RESTful Web服务是轻量级的,高度可扩展性和可维护性,并且非常常用于创建基于API的Web应用程序. ...

  10. 【DS】排序算法之选择排序(Selection Sort)

    一.算法思想 选择排序是一种简单直观的排序算法.它的工作原理如下: 1)将序列分成两部分,前半部分是已经排序的序列,后半部分是未排序的序列: 2)在未排序序列中找到最小(大)元素,放到已排序序列的末尾 ...