在使用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. native2ascii -reverse -encoding UTF-8 validation_msg.properties > validation_msg_src.properties

    native2ascii -reverse -encoding UTF-8 validation_msg.properties > validation_msg_src.properties

  2. 【题解】 [HNOI2015]落忆枫音 (拓扑排序+dp+容斥原理)

    原题戳我 Solution: (部分复制Navi_Aswon博客) 解释博客中的两个小地方: \[\sum_{\left(S是G中y→x的一条路径的点集\right))}\prod_{2≤j≤n,(j ...

  3. 【Revit API】墙体分割

    Revit中没有分割墙体的直接方法,一般采用调整原墙体的长度,再复制自身,调整复制体的长度.话不多说,直接上代码 public static void WallCopy(Document doc, X ...

  4. 洛谷 T28312 相对分子质量【2018 6月月赛 T2】 解题报告

    T28312 「化学」相对分子质量 题目描述 做化学题时,小\(F\)总是里算错相对分子质量,这让他非常苦恼. 小\(F\)找到了你,请你来帮他算一算给定物质的相对分子质量. 如果你没有学过相关内容也 ...

  5. 洛谷 P2224 [HNOI2001]产品加工 解题报告

    P2224 [HNOI2001]产品加工 题目描述 某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需 ...

  6. 内置函数sorted()

    这里顺便说一下sorted()和sort()的异同. sort 是 list 中的方法,只能对列表排序:sorted 可以对所有可迭代对象进行排序. list 的 sort 方法是对原列表进行操作,而 ...

  7. asp.net mvc 全局权限过滤器及继成权限方法

    全局权限过滤器 //----------------------------------------------------------------------- // <copyright f ...

  8. HTML5 文件API

    filelist 表示文件对象的列表. <form name="upload"> <input type="file" name=" ...

  9. Hadoop生态圈-Kafka配置文件详解

    Hadoop生态圈-Kafka配置文件详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.默认kafka配置文件内容([yinzhengjie@s101 ~]$ more /s ...

  10. webpack快速入门——CSS进阶:自动处理CSS3前缀

    为了浏览器的兼容性,有时候我们必须加入-webkit,-ms,-o,-moz这些前缀.目的就是让我们写的页面在每个浏览器中都可以顺利运行. 1.安装 cnpm i postcss-loader aut ...