在使用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. c#public、private、protected、internal、protected internal

    public 公有访问.不受任何限制.private 私有访问.只限于本类成员访问,子类,实例都不能访问.protected 保护访问.只限于本类和子类访问,实例不能访问.internal 内部访问. ...

  2. MT【93】二次函数衣服一件

    注:最后一行中$f(\dfrac{-x_1}{2})$应改为$f(\dfrac{-a}{2})$.有空再重新编辑.

  3. 【BZOJ1019】[SHOI2008]汉诺塔(数论,搜索)

    [BZOJ1019][SHOI2008]汉诺塔(数论,搜索) 题面 BZOJ 洛谷 题解 首先汉诺塔问题的递推式我们大力猜想一下一定会是形如\(f_i=kf_{i-1}+b\)的形式. 这个鬼玩意不好 ...

  4. 【CF949D】Curfew(贪心)

    [CF949D]Curfew(贪心) 题面 CF 洛谷 破池姐姐翻译好强啊 题解 今天菊开讲这题,我大力猜想一波说肯定从中间有个分界线,他还说可能是假的 大力贪心就好了,从两边往中间考虑,只要这个房间 ...

  5. 解决360WiFi有时候手机连接不上

    有可能是无线网卡的问题: 右击“计算机”->选择“管理”->“设备管理器”->网络适配器->选择“Broadcom  802.11n 网络适配器”,或者你实在不知道哪个是无线网 ...

  6. ssm框架配置过程

    1.pom.xml配置 1.1<build>标签中配置<plugins>和<resources>,即插件和资源文件 1.2 <properties>标签 ...

  7. 监控IIS的运行状态

    IIS经常出现假死的情况,具体什么时候会出现假死,我就不说了,今天我要写的是如何监控IIS的状态. 程序的功能是:如果IIS是为运行的状态,就重启IIS,如果IIS的连接数达到了设置的连接数,也重启I ...

  8. linux basic ------ 多命令执行

    当我们需要一次执行多个命令的时候,命令之间需要用连接符连接,不同的连接符有不同的效果.下面我们总结一下,加以区分. (1)  ; 分号,没有任何逻辑关系的连接符.当多个命令用分号连接时,各命令之间的执 ...

  9. linux command ------ source

    source FileName 等效于. FileName,注 . 和 FileName 有空格 source命令也称为“点命令”,也就是一个点符号(.),作用是在当前bash环境下读取并执行File ...

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

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