标签: serilog

Serilog:{..}和{@ ..}之间的差异

鉴于此代码:

var d1 = new { x = 5, y = 88 };
Log.Logger.Information("{d1}", d1);
Log.Logger.Information("{@d1}", d1);
Run Code Online (Sandbox Code Playgroud)

如何在两个Log.Logger.Information(...)行中以不同方式记录d1中的对象?换句话说,在{}之间添加@的影响是什么?

我在"保留对象结构"标题下阅读了https://github.com/serilog/serilog/wiki/Structuredvals,但这对我来说没有意义.

.net serilog

3
推荐指数
1
解决办法
831
查看次数

Serilog.Extras.Web的ApplicationLifecycleModule如何自动注册?

引用Serilog Wiki:

ApplicationLifecycleModule将自动启用...

好,太棒了.这是怎么回事?它没有列在<modules/>web.config 的元素中,并且在我的代码中没有任何引用.那么将它们连接起来的神奇之处在哪里?

asp.net serilog

3
推荐指数
1
解决办法
544
查看次数

什么是Serilog解构?

Serilog @语法的目的是什么?

如果我运行以下内容:

var dummy = new { Foo = "Bar", Date = DateTime.Now };

Log.Information("Dummy object: {Dummy}", dummy);
Run Code Online (Sandbox Code Playgroud)

然后我得到一个输出到控制台,如下所示:

Time: 16:20 [Level: Information] (ManagedThreadID: 8) Message: Dummy object: "Foo = Bar, Date = 25/06/2016 16:20:30 }"
Run Code Online (Sandbox Code Playgroud)

如果我更改{Dummy}{@Dummy}然后我得到相同的输出

Time: 16:22 [Level: Information] (ManagedThreadID: 8) Message: Dummy object:  Foo: "Bar", Date: 06/25/2016 16:22:28 }
Run Code Online (Sandbox Code Playgroud)

那么,@应该做什么?

.net logging destructuring serilog

3
推荐指数
1
解决办法
2428
查看次数

Serilog with 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 影响(也许我的担忧是没有根据的?)。

这是实现我想要的(即使用浓缩器)的正确/正确方法还是我错过了什么?

干杯!

serilog getseq seq-logging

3
推荐指数
1
解决办法
1522
查看次数

Serilog在C#中进行条件记录

有一个Asp.Net核心项目要求我们需要将错误,警告,信息,异常等记录到以下流中:

1)SQL Server表.

2)在日志记录期间,如果SQL Server数据库突然变得不可用,我们希望通过将日志条目写入共享网络文件夹来继续日志记录.

3)同样,如果在记录期间,共享网络文件夹变得不可用,那么我们希望继续记录到本地文件夹.

这种情况是Serilog(https://serilog.net/)可以帮助我们实现的吗?

c# serilog asp.net-core-mvc asp.net-core

3
推荐指数
1
解决办法
585
查看次数

Serilog - 如何自定义格式化文件接收器的解构类对象的输出

我正在使用 Serilog 登录到两个“接收器”。

  1. 滚动文本文件
  2. 序列

我想记录一个复杂类型 - FileInfo 对象。

在 Seq 中,我想要完整的对象,以及它的所有属性可供我使用。

但是,在 RollingTextFile 中,我只希望在文本文件中打印“ fileInfo.FullName ”,否则文本文件会很乱且难以阅读。

我的日志记录如下;

logger.Information("Processing File: {@fileInfo}  - Attempt ({intAttemptCounter}/3).",fileInfo, intAttemptCounter)
Run Code Online (Sandbox Code Playgroud)

这在文件信息对象解构的情况下按预期工作,但如上所述,会产生混乱且不可读的文本文件。

我想我需要使用这里概述的自定义“格式提供程序”;https://github.com/serilog/serilog/wiki/Formatting-Output#format-providers

但我无法弄清楚如何为 fileInfo 类对象实现这一点并将其仅应用于 RollingTextFile 接收器。我也找不到任何其他示例实现。

logging serilog

3
推荐指数
1
解决办法
1883
查看次数

在记录消息时,如何设置Serilog在SQL Server中调用存储过程?

在记录消息时,如何设置Serilog在SQL Server中调用存储过程?我看到如何使用MS SQL Server接收器将消息直接存储在数据库表中,但我想调用存储过程.

sql-server serilog

3
推荐指数
1
解决办法
464
查看次数

使用自定义目标将所有NLog输出重定向到Serilog

作为从NLog切换到Serilog的一个步骤,我想将NLog标准调用的标准接线重定向LogManager.GetLogger(name)到桥接任何记录到NLog的代码,立即转发到环境Serilog Log.Logger- 即我只想转发一个简单转发的配置消息,没有像Log4net.Appender.SerilogLog4net 那样缓冲.

任何人都可以编造或指向一个规范的片段,正确有效地做到这一点吗?我能想到的要求:

  • 保持水平,即nlog.Warn应该相当于serilog.Warning
  • Serilog可以重新产生时间
  • 在appender中实现消息 - 即,不需要维护与'message'相关的任何属性(LogEvent在Serilog术语中)
  • 没有缓冲
  • 我不需要使用任何其他NLog目标(即改变/删除消息会很好)

porting nlog target sink serilog

3
推荐指数
1
解决办法
681
查看次数

.net Core和Serilog电子邮件接收器-json配置

我正在使用.net Core 2.0和Serilog电子邮件接收器。我在配置电子邮件接收器时遇到问题appsettings.json。from的相同配置program.cs有效,而from 的相同appsetting.json无效。

这是来自appsettings.json的代码

这是来自program.cs的代码

email json serilog .net-core asp.net-core

3
推荐指数
2
解决办法
1773
查看次数

在WebApi2上使用Serilog的正确方法

我正在寻找将serilog与aspnet webapi2结合使用的正确方法。现在,我像这样初始化全局Log.Logger属性:

   public static void Register(HttpConfiguration config)
    {

        Log.Logger = new LoggerConfiguration()
            .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200"))
            {
                IndexFormat = IndexFormat,
                BufferBaseFilename = outputLogPath,
                AutoRegisterTemplate = true,
                AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv6,
                CustomFormatter = new ElasticsearchJsonFormatter(renderMessageTemplate: false),
                BufferFileCountLimit = NbDaysRetention
            })
            .MinimumLevel.ControlledBy(new LoggingLevelSwitch() { MinimumLevel = LogEventLevel.Information})
            .Enrich.FromLogContext()
            .Enrich.WithWebApiRouteTemplate()
            .Enrich.WithWebApiActionName()
            .CreateLogger();

        //Trace all requests
        SerilogWebClassic.Configure(cfg => cfg.LogAtLevel(LogEventLevel.Information));


        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
Run Code Online (Sandbox Code Playgroud)

有更清洁的方法吗?我想知道,如果我必须对控制器进行一些测试,是否可能会导致问题。

asp.net-web-api2 serilog

3
推荐指数
1
解决办法
755
查看次数