在使用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. kvm安装配置

    操作系统版本:CentOS Linux release 7.5.1804 (Core) 内核版本:3.10.0-862.el7.x86_64 1.安装 安装以下软件.yum -y install qe ...

  2. 用css绘制图形

    巧用css的border-radius属性,也能绘制出好看的图形 html部分 <!DOCTYPE html><html> <head> <meta char ...

  3. Django_博客项目 引入外部js文件内含模板语法无法正确获取值得说明和处理

    问题描述 : 项目中若存在对一段js代码复用多次的时候, 通常将此段代码移动到一个单独的静态文件中在被使用的地方利用 script 标签的 src 属性进行外部调用 但是如果此文件中存在使用 HTML ...

  4. BZOJ 4173: 数学

    4173: 数学 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 462  Solved: 227[Submit][Status][Discuss] D ...

  5. Problem C Dist 解题报告

    Problem C Dist Description 有一个\(n\)个点带边权的连通无向图,边集用\(k\)个集合\(s_1,s_2,\dots,s_k\)和\(k\)个整数\(w_1,w_2,\d ...

  6. QeePHP View视图的默认变量与新增变量

    新版本的QeePHP(V13.1)中,视图页面已经默认添加了几个常用变量 $_app; //控制器所属的应用程序 $_login_user;  //登陆用户信息 直接在视图页面直接使用变量即可. 如果 ...

  7. Python中的requests模块注意事项

    主要是说requests.post()方法, 参数: url :  这就不解释了 data:  如果传入的是字典类型,则字典在发出请求时会自动编码为表单形式,表单形式会将字典中的键和值进行一些操作: ...

  8. webpack进阶--打包

    上一片博文主要让大家了解下究竟webpack是干什么的,明显它是专注于打包的. gulp  和  webpack  的区别 gulp,要求我们一步步写task(es6编译.css压缩.图片压缩.打包. ...

  9. javascript公有静态成员

    公共静态成员在javascript中并没有特殊语法来表示静态成员.但是可以通过使用构造函数向其添加属性这种方式. //构造函数 var Gadget = function(){}; //静态方法 Ga ...

  10. 【两分钟教程】如何更改Xcode项目名称

    注意:视频在最后,还少了一个步骤:将Xcode中的名字叫做<企信通>的虚拟文件夹删掉,然后重新从硬盘中添加进来,这样就彻底完成了更改Xcode项目名称的目的.