从WinForm/Web应用程序登录时,Serilog和Seq工作正常.我只在使用控制台应用程序时遇到问题.没有写, Log.CloseAndFlush()它就不起作用了.以下是我的LoggerConfiguration
Log.Logger = new LoggerConfiguration()
.WriteTo.Seq("http://localhost:5341")
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
有没有办法记录而不调用,Log.CloseAndFlush()以便它与控制台应用程序中的seq,serilog一起使用.
我正在使用Serilog作为我的日志框架(Seq作为我的日志接收器).记录异常时,我使用的是:
log.Error(ex, "Operation Failed");
Run Code Online (Sandbox Code Playgroud)
我的应用程序大量使用async/await方法.当发生未处理的异常时,堆栈跟踪很难读取.有一个nuget包可以清理异步堆栈跟踪(https://github.com/aelij/AsyncFriendlyStackTrace).这将创建一个扩展方法,使您可以访问已修改/清除的堆栈跟踪:
ex.ToAsyncString()
Run Code Online (Sandbox Code Playgroud)
我希望能够使用此库在写入Seq之前拦截堆栈跟踪,而是记录清理/修改的堆栈跟踪.
是否有一种方法可以使用Serilog/Seq来控制发送到日志接收器的错误字符串的确切输出?
我有一个具有多个属性的对象,这些属性与我网站上刚刚发生的事件相关。
我想记录此事件,并将其每个属性显示在 Seq 中 - 作为属性。但是想要从实际的日志消息文本中省略大部分属性 - 所以我不希望它们出现在消息模板中。v
如果我这样做:
var logInfo= new LogInfo() {Foo = 1, Bar= "Pending"};
logger.Information("{@event}", logInfo);
Run Code Online (Sandbox Code Playgroud)
在 Seq 中直接针对日志亮起的唯一属性是 @event 属性。它实际上看起来像这样:
所以我试过这个:
var enricher = new DnnLogInfoEnricher(logInfo);
using (LogContext.PushProperties(enricher))
{
Log.Logger.Information("Event: {logInfo}", logInfo.LogTypeKey, logInfo.Exception);
}
Run Code Online (Sandbox Code Playgroud)
但我对这种方法的担忧是,由于此方法将触发大量次数,因此我不想每次都创建一个新的丰富对象实例 - 因为我喜欢保持正在创建的对象数量通常尽可能低。只是因为我担心 GC 影响(也许我的担忧是没有根据的?)。
这是实现我想要的(即使用浓缩器)的正确/正确方法还是我错过了什么?
干杯!