asp.net-core – 丰富Serlilogs,每个hangfire工作具有独特的价值
发布时间:2020-12-16 09:33:12 所属栏目:asp.Net 来源:网络整理
导读:我正在使用Hangfire进行后台工作,而使用Serilog进行日志记录.我正在尝试使用TrackingId丰富我的serilogs,以便来自特定Hangfire作业的所有日志都具有我可以过滤的相同TrackingId. 我在Startup.cs中配置了这样的Serilog: Log.Logger = new LoggerConfiguratio
我正在使用Hangfire进行后台工作,而使用Serilog进行日志记录.我正在尝试使用TrackingId丰富我的serilogs,以便来自特定Hangfire作业的所有日志都具有我可以过滤的相同TrackingId.
我在Startup.cs中配置了这样的Serilog: Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(Configuration) .WriteTo.Seq(serverUrl: serverUrl,apiKey: apiKey) // Enrich the logs with a tracking id. Will be a new value per request .Enrich.WithProperty("TrackingId",Guid.NewGuid()) .CreateLogger(); 我排队这样的工作: BackgroundJob.Enqueue<MyService>(myService => myService.DoIt(someParameter)); 但是这样做不会为每个Hangfire工作设置单独的TrackingId.有什么办法可以实现吗? 解决方法
为了它的价值,我最终使用下面显示的服务器/客户端过滤器和GlobalJobFilters注册将其关闭.我遇到的一个令人烦恼的问题是,AutomaticRetryAttribute默认添加到GlobalJobFilters集合,而
will log errors for failed jobs类则不知道在我们的自定义JobLoggerAttribute中创建的Serilog LogContext.就个人而言,我知道我只允许手动重试,所以我只删除了该属性并处理了IServerFilter.OnPerformed方法中的错误.检查我的帖子的结尾,看看如果它适合你,如何删除它.
如果要允许自动重试,则需要:1)创建一个自定义属性来装饰AutomaticRetryAttribute并使其知道自定义LogContext,2)再次从GlobalJobFilters集合中删除默认的AutomaticRetryAttribute,并且3)添加你的decorator属性集合. public class JobLoggerAttribute : JobFilterAttribute,IClientFilter,IServerFilter { private ILogger _log; public void OnCreating(CreatingContext filterContext) { _log = GetLogger(); _log.Information("Job is being created for {JobType} with arguments {JobArguments}",filterContext.Job.Type.Name,filterContext.Job.Args); } public void OnCreated(CreatedContext filterContext) { _log.Information("Job {JobId} has been created.",filterContext.BackgroundJob.Id); } public void OnPerforming(PerformingContext filterContext) { if (_log == null) _log = GetLogger(); _log.Information("Job {JobId} is performing.",filterContext.BackgroundJob.Id); } public void OnPerformed(PerformedContext filterContext) { _log.Information("Job {JobId} has performed.",filterContext.BackgroundJob.Id); if (filterContext.Exception != null) { _log.Error( filterContext.Exception,"Job {JobId} failed due to an exception.",filterContext.BackgroundJob.Id); } _log = null; } private ILogger GetLogger() { return Log.ForContext(GetType()).ForContext("HangfireRequestId",Guid.NewGuid()); } } 注册…… GlobalJobFilters.Filters.Add(new JobLoggerAttribute()); 删除AutomaticRetryAttribute … var automaticRetryFilter = GlobalJobFilters.Filters.Where(x => x.Instance is AutomaticRetryAttribute).Single(); GlobalJobFilters.Filters.Remove(automaticRetryFilter.Instance); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 模型 – 视图 – 控制器 – ASP.NET MVC:将ViewModels嵌套
- asp.net-mvc – ASP.NET MVC – 我可以为同一个动作创建多个
- asp.net-mvc – @ Html.BeginForm()如何工作?
- 如何从ASP.NET中的代码隐藏文件访问IFRAME?
- asp.net-mvc – ASP.NET MVC2和MemberShipProvider:它们如
- asp.net – 我应该关心ASP .NET中的静态int(4字节)变量的线
- asp.net-mvc – MVC3 Url.Action查询字符串生成
- ASP.net MVC4:在局部视图中使用不同的模型?
- asp.net-mvc – 如何显示图像从路径在asp.net mvc 4和剃刀视
- asp.net – RegisterStartupScript不适用于ScriptManager,U
推荐文章
站长推荐
- asp.net – 使用SQLBulkCopy插入/更新数据库
- asp.net – Umbraco CMS(.NET):加载xslt /用户控
- 在我的asp.net-mvc页面中,为什么没有选择正确的下
- 如何从中等信任的ASP.NET中的bin文件夹加载文件
- ASP.NET中实现把Json数据转换为ADO.NET DataSet对
- asp.net-mvc-4 – GAC问题不能在IIS上托管应用程
- asp.net – 可以postgresql扩展到像sql server这
- ASP.NET MVC Url路由支持(点)
- 如何在IIS 10上承载ASP.NET Web API 2项目
- asp.net-mvc – 使用Razor DropDownList的Bootst
热点阅读