乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 108|回复: 6

使用Serilog+Seq进行日志记录

[复制链接]

23

主题

239

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
327
发表于 2015-4-23 18:31:02 | 显示全部楼层 |阅读模式
Serilog是一个,NET日志框架,以结构化、可查询的方式写入日志事件。Seq是Serilog的超文本传输协议接收器,Serilog还有很多其他内置接收器,称为“接收器”,因此您可以将日志写入文件、控制台、数据库......以任何组合。Seq只是其中一个接收器,还有很多其他接收器您可以插入其中。Seq的美妙之处在于它可以为您提供localhost页面中日志事件的实时提要,看看http://getseq.net/的截图,还有http://nblumhardt.com/Serilog的美妙之处在于结构化的事件数据。上面链接中的截图将向您展示我的意思,当我摸索它的整个结构化、可查询方面时,我的“哇”时刻到来了。Seq对单个用户是免费的,如果您部署到需要API密钥来管理流量的多用户多层环境,您只需要付费许可证。Serilog在Github上是免费的,我发现它非常容易安装和启动并运行,只需安装Seq并将Serilog Nuget包添加到您的Visual Studio解决方案中,您就可以开始了。这是一段脱离上下文几乎没有意义的代码片段,但它是结构化日志记录的说明......if(CableNumberAtcm==null)。
{。
如果(!OffSheetBlocksWithNoCableAttribute.Contains(block.Name))。
{。
Log.Warning("{DwgFileName}-block:{BlockName}没有电缆号的属性,{OffSheets}{@Tags}",。
Path.GetFileNamedb.Filename。
block.Name,。
表格,。
attributeRefs.Select(a=>a.Tag),ToList());。

OffSheetBlocksWithNoCableAttribute.Add(block.Name);。
}。
}注意{@Tags}属性,它会将该列表序列化到日志中,以便您的接收器可以反序列化它并以接收器本机的方式显示它,TLDR;(是的,讽刺)如果你想要日志记录,这是我见过的最棒的日志记录。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

23

主题

239

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
327
发表于 2015-7-14 15:08:27 | 显示全部楼层
你好,伙计,
我只是想说,根据你的帖子,我继续使用Serilog登录我的应用程序。它确实工作得非常好,这取决于你是否愿意花时间来正确地实现它,它可以让你很好地理解你的程序实际上在做什么,而不必一步一步地通过代码。目前,我只记录到一个文件,但计划对所有内部记录使用Seq,并将继续记录到任何分布式应用程序的文件。
无论如何,我只想感谢您让社区关注到Serilog。
回复

使用道具 举报

23

主题

239

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
327
发表于 2015-7-16 17:50:39 | 显示全部楼层
嗨,基思<br>很高兴听到它也适合你。我见过作者-他也制作了autofac。他也是一个非常聪明和蔼可亲的家伙。我倾向于使用Seq http接收器(receiver)并在浏览器中实时查看日志记录,但我可以肯定地看到日志记录到文件中的价值。当然,您可以通过更改构造函数调用来实现这两种功能
回复

使用道具 举报

23

主题

239

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
327
发表于 2017-2-27 21:34:32 | 显示全部楼层
来自过去/未来的问候。对此的更新,我仍然在任何地方使用Serilog,这些天我使用https://github.com/RolandPheasant/TailBlazer实时查看日志(这也是对WPF和反应式扩展的一项伟大研究)。
回复

使用道具 举报

23

主题

239

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
327
发表于 2017-3-2 10:31:41 | 显示全部楼层

实时观看与使用Seq有什么不同?我在所有的编码中都使用了Serilog和Seq,并发现它对调试有很大帮助。我只是想知道如何使用TailBlazer将增强这一点。
回复

使用道具 举报

23

主题

239

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
327
发表于 2017-3-2 21:08:56 | 显示全部楼层
在实时中,它几乎是一样的,但有一些区别,如过滤,标签处理等。Tailblazer可以打开任何日志,因此您可以在同一应用程序中查看较旧的日志。您也不需要安装和运行 Seq。这些天你也可以在Notepad ++中尾部日志,但我没有发现这是一个流畅的体验。
自从我使用其中任何一个(该死的那天工作!)以来已经有几个月了,但是是的,它们都很棒。
回复

使用道具 举报

23

主题

239

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
327
发表于 2017-10-25 23:10:20 | 显示全部楼层
我在Serilog和AutoCAD插件中发现了一个有趣的竞争条件,我在https://stackoverflow.com/questions/46900488/serilog-logger-for-each-plugin-dll-in-one-application
如果您使用静态Serilog。使用多个插件登录
,然后他们各自创建同一个静态日志,最后一个创建它的插件拥有它,并确定使用该静态日志的所有插件的登录设置。下面是我如何修复的。在每个插件中,…
公共类应用程序{
/
此插件的记录器
//
无法使用静态
,因为每个插件都需要自己的
//
https://stackoverflow.com/questions/46900488/serilog-logger-for-each-plugin-dll-in-one-application
内部静态记录器日志
/..
公共void Initialize()
{
字符串logFileName=Environment.GetFolderPath
(Environment.SpecialFolder.ApplicationData)+“\\CADbloke\\CADtools\\Logs\\CADfindReplace-{Date}.log”
组装=组装。GetAssembly(typeof(App)); //  
FileVersionInfo fvi=fileversionifo.GetVersionInfo(assembly.Location)
字符串版本=fvi.FileVersion
Log=new LoggerConfiguration()
#如果调试
.MinimumLevel.Verbose()
#endif
。丰富。WithProperty(“版本”,版本)
。写入。滚动文件(logFileName,outputTemplate:“[v{Version}]{Timestamp:yyyy-MM-dd-HH:MM:ss.fff}[{Level}]}{Message}{NewLine}{Exception}”)
.CreateLogger()
/..
}
//当您使用它时……
App.Log。信息(“CAD查找和替换唤醒”)
/..
捕获(例外情况除外)
{
应用程序日志错误
(例如,
messageTemplate:“未能设置隐含选择.Dwg:{Dwg},Refedit块名:{Refedit}”,
属性值0:filename,
属性值1:refEditBlockName());//我通常不输入参数名,这是为了说明Serilog的工作原理。

}
//当您关闭应用程序时
公共无效终止()
{
App.Log。Dispose();//刷新记录器
/..
}
我还有一个未处理的异常捕捉器,用于清理记录器。看见https://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception(v=vs.90)。aspx
<div class=“csharp geshi”><ol><dvi>//进入公共无效初始化(</div>)
//https://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception(v=vs.90)。aspx
AppDomain currentDomain=AppDomain.currentDomain
当前域。UnhandledException+=新的Unhandled ExceptionEventHandler(UnhandledeExceptionCatcher)
}/..
内部静态void UnhandledExceptionCatcher(对象发送者,unhandledeExceptionEventArgs)
{
//https://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception(v=vs.90)。aspx
异常e=(异常)args.ExceptionObject
App.Log。错误(e,“未处理的异常捕获程序捕获了此.IsTermination:{Died}”,args.IsTerminating)
App.Log。Dispose();//刷新记录器-它将在Terminate()运行之前崩溃,因此不会重复处理。嘿,如果是这样,你会失去什么
}
我使用来自https://marketplace.visualstudio.com/items?itemName=PrecisionInfinity.AutomaticVersions要将更新程序集文件版本设置为无、无、日期(yyddd),请递增
。这就是为什么我要记录版本号,它会随着每次构建而变化。获取版本的代码来自:https://stackoverflow.com/a/12528418/492
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 12:49 , Processed in 0.151616 second(s), 66 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表