什么是Seq?
正如我们使用不同的日志框架来为我们的应用程序收集各类日志信息, 这些信息可以有效的帮助我们快速诊断应用程序中发生的各类问题, 尽管如此,
对于常见的日志框架而言, 它们往往只是解决了日志功能快速集成以及如何配置输出保存等功能。
对于那些不间断运行的应用程序而言, 日志的存储和维护工作会变得异常麻烦, 如果想灵活的在不同时间段去查找日志, 根据不同的日志类型快速的定位问题,
这会变得非常困难,所以为了解决这些问题, Seq就登场了。Seq提供了收集应用程序日志、搜索过滤、警告以及图表分析等功能。
如何使用Seq?
如果你使用了类似Nlog、Serilog等日志框架, 那很棒, 对于你来说,你几乎可以很少的配置它即可快速的实现Seq集成。Seq提供了Nlog、Serilog、Log4Net等框架的Seq扩展包。
首先, 你需要安装且配置好Seq, 官方提供了两种方式快速创建Seq服务
出于演示的目的, 这里直接安装Docker镜像来演示:
-
下载Seq Docker镜像
docker pull datalust/seq -
启动Seq实例, 本地端口5341
docker run --name seq -d --restart unless-stopped -e ACCEPT_EULA=Y -p 5341:80 datalust/seq:latest -
打开浏览器输入,即可
完成Seq的配置之后, 接下来在应用程序当中安装Nlog、Nlog.Config、NLog.Targets.Seq。
打开Nlog.Config,配置Seq:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
<extensions>
<add assembly="NLog.Targets.Seq"/>
</extensions>
<targets>
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />
<target name="seq" xsi:type="BufferingWrapper" bufferSize="1000" flushTimeout="2000">
<target xsi:type="Seq" serverUrl="http://localhost:5341" apiKey="" />
</target>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="seq" />
</rules>
</nlog>
以上完成了Nlog的配置, 当应用程序输出Debug的时候, 即可将信息写入至Seq。
应用程序调用Debug输出:
private void Button_Click_3(object sender, RoutedEventArgs e)
{
logger.LogDebug("Button_Click_3");
}
再次浏览器打开Seq的服务地址, 会记录所有点击Debug的详细信息, 如下所示:
Seq的其他功能
日志保存到Seq服务器已经完成,剩下的工作就是如果使用Seq集成的搜索、过滤、图标分析等功能, 来快速诊断应用程序当中的警告、错误信息等,
通过不同的日志分析, 我们很可能快速的预知存在问题所在, 这些甚至可以在客户未察觉异常之前, 我们可以快速的做出响应。
关于Seq的更多使用方法,及高级用法, 可参考官方文档,考虑Seq也是一个收费性质的框架,就不做过多的介绍,不过有兴趣的可以深入了解。