Exceptionless(二) - 使用进阶 (3)

然后在Startup.cs的ConfigureServices方法注入ExceptionlessLogger

public void ConfigureServices(IServiceCollection services) { services.AddSingleton<ILogger, ExceptionlessLogger>(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }

这样就可以更方便地使用了

public class ValuesController : ControllerBase { public ILogger _logger; public ValuesController(ILogger logger) { _logger = logger; } // GET api/values/{id} [HttpGet("{id}")] public ActionResult<string> Get(int id) { try { _logger.Info("Test msg", "tag1", "tag2"); throw new Exception(); } catch (Exception ex) { ex.ToExceptionless().AddTags("tag1", "tag2").Submit(); } return $"value {id}"; } }

Broken Links
记录404找不到请求的日志

像我这里没有添加favicon.ico图标,使用Chrome浏览器会自动请求这个资源,因此,Exceptionless就记录了这样的日志

less_30_brokenlinks

也可以直接在Api服务中调用如下面语句添加这种类型的日志

ExceptionlessClient.Default.CreateNotFound("404 not found").SetType("404").SetSource($"api/values/{id}");

Feature Usages
类似的也可以添加Feature Usages日志

ExceptionlessClient.Default.CreateFeatureUsage("Feature 1").SetSource($"api/values/{id}").SetType("FeatureType").Submit(); 事件

上面所说的所有日志类型,最终都会通过事件进行记录,Exceptionless也支持我们直接记录一个事件

例子如下:

var dataDic = new Exceptionless.Models.DataDictionary(); dataDic.Add("key", "value"); ExceptionlessClient.Default.SubmitEvent(new Exceptionless.Models.Event { Count = 1, Date = DateTime.Now, Data = dataDic, Geo = "geo", Message = "message", ReferenceId = "referencelId", Source = "source", Tags = new Exceptionless.Models.TagSet() { "tags" }, Type = "type" });

Exceptionless同时也支持我们捕获事件提交过程和事件提交后的事件,这样我们就可以在过程中做一些操作,例如可以忽略404的请求,或者针对某些特殊日志返回某些信息

为了代码的整洁,可以将Exceptionless的配置单独放到一个cs文件中

添加一个ExceptionlessBuilderExtensions类

public static class ExceptionlessBuilderExtensions { public static IApplicationBuilder UseExceptionless(this IApplicationBuilder app, IConfiguration configuration) { ExceptionlessClient.Default.Configuration.ApiKey = configuration["Exceptionless:ApiKey"]; ExceptionlessClient.Default.Configuration.ServerUrl = configuration["Exceptionless:ServerUrl"]; ExceptionlessClient.Default.SubmittingEvent += OnSubmittingEvent; app.UseExceptionless(); return app; } private static void OnSubmittingEvent(object sender, EventSubmittingEventArgs e) { if (e.Event.IsNotFound()) { e.Cancel = true;//取消事件提交 return; } // 修改日志信息 if (e.Event.Source == "sourceA") { e.Event.AddTags("systemLog"); } //TODO: } private static void OnSubmittedEvent(object sender, EventSubmittedEventArgs e) { // 做点什么东西 if (e.Event.Source == "sourceA") { //TODO: } } }

然后修改Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env) { …… app.UseExceptionless(Configuration); …… } Exceptionless 日志查询

Exceptionless Web站点已经帮我们做好项目、时间、日志类型的分类,大家可以很直观地进行操作查询。
我这里要关注的是Filter查询

前面记录日志的时候,有添加了tag、Type等信息,这时候就可以使用Filter进行查询了。
语法:

[FilterType]:[value1] {or} {[value2]}

or是用于查询多个该类型值的日志时使用

例如:tag:tag1

less_32_filtertag

列几个可能比较常用的

source:"my log source" or "my log source"

type:error

level:Error

ip:127.0.0.1

如果是要同时输入多种类型的条件:

[FilterType]:[value] {OR|AND} {[FilterType]:[value]}

例如:tag:tag1 OR ip:127.0.0.1

更多的语法可以看官网说明
https://github.com/exceptionless/Exceptionless/wiki/Filtering-Searching

总结

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzfdd.html