小编Nic*_*rdt的帖子

Serilog与Autofac

我有一个记录器包装器,我想用以下配置perse注入serilog:

var logger = new LoggerConfiguration()
   .WriteTo.RollingFile(
      AppDomain.CurrentDomain.GetData("DataDirectory").ToString() + "/Log-{Date}.txt")
   .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

我似乎无法找到一种正确的注册方式.我想要它作为单身人士.以上是实例.

我尝试注册上面的实例.没工作.我试过lambda,没有工作.

什么有用?任何人?

c# autofac serilog

11
推荐指数
1
解决办法
5953
查看次数

Serilog、Microsoft.Extensions.Logging 和 Autofac

我有一个面向 .Net Framework 4.6.1 的 Asp Net Core API。在这个项目中,我将 Serilog 与 Microsoft.Extensions.Logging 以及 Auofac 用于 DI。在控制器构造函数中使用带有 DI 的 ILogger< T> 记录器完美地工作,我也得到了日志。

当在 API 中我需要使用另一个项目 use Microsoft.Extensions.Logging 和 Autofac 并期望在某些构造函数中接收 ILogger< T> 时,乐趣就开始了。我在两个项目中都安装了相同版本的 Microsoft.Extensions.Logging。

我得到了以下例外情况:

Autofac.Core.DependencyResolutionException: '激活 Microsoft.Extensions.Logging.Logger 1[[Microsoft.AspNetCore.Hosting.Internal.WebHost, Microsoft.AspNetCore.Hosting, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]] -> Microsoft.Extensions.Logging.LoggerFactory -> ?:Microsoft.Extensions.Logging.ILoggerProvider[] -> Microsoft.Extensions.Logging.Console.ConsoleLoggerProvider -> Microsoft.Extensions.Options.OptionsMonitor1时抛出异常[[Microsoft.Extensions.Logging.Console.ConsoleLoggerOptions, Microsoft.Extensions.Logging.Console, Version=2.2.0.0, Culture=neutral , PublicKeyToken=adb9793829ddae60]] -> Microsoft.Extensions.Options.OptionsFactory 1[[Microsoft.Extensions.Logging.Console.ConsoleLoggerOptions, Microsoft.Extensions.Logging.Console, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]] -> ?:Microsoft.Extensions.Options.IConfigureOptions1[[Microsoft.Extensions.Logging.Console.ConsoleLoggerOptions, Microsoft.Extensions.Logging.Console, Version=2.2.0.0, Culture=neutral, PublicKey9Token=adb97ae] ][] -> Microsoft.Extensions.Logging.Console.ConsoleLoggerOptionsSetup -> Microsoft.Extensions.Logging.Configuration.LoggerProviderConfiguration`1[[Microsoft.Extensions.Logging.Console.ConsoleLoggerProvider, Microsoft.Extensions.Logging.Console, Version=2.2 .0.0,文化=中性,PublicKeyToken=adb9793829ddae60]]。'

内部异常 1:DependencyResolutionException:在类型 …

c# serilog asp.net-core

7
推荐指数
1
解决办法
4129
查看次数

如何让Serilog实例立即记录到Seq而不需要调用它的Dispose()?

我有一个 Windows 服务,它处理长时间运行的任务,并且永远不会关闭,除非强制关闭(即计算机关闭)。我希望在 Windows 服务启动和运行的整个过程中保持同一个 Serilog 实例处于活动状态(出于性能原因)。

但是,我只在 Dispose() 调用之后看到日志,如下所示。

var logger = new LoggerConfiguration()
            .WriteTo.Seq("http://localhost:5341")
            .CreateLogger();

logger.ForContext("TestContext", new { Machine = "TSTDB2" }, true).Information("Test");

logger.Dispose();
Run Code Online (Sandbox Code Playgroud)

我不介意几秒钟的延迟,但必须等到 Serilog 实例被处理对我来说不起作用。任何解决方案将不胜感激。

seq serilog seq-logging

5
推荐指数
1
解决办法
4121
查看次数

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序列化字段

如果我有以下课程

public class Customer
{
    public string Name;
}
Run Code Online (Sandbox Code Playgroud)

然后在Serilog中有以下log命令

Log.Logger = new LoggerConfiguration()
    .WriteTo.Console()
    .WriteTo.Seq("http://localhost:5341")
    .CreateLogger();

var item = new Customer();
item.Name = "John";
Serilog.Log.Information("Customer {@item}", item);
Run Code Online (Sandbox Code Playgroud)

日志仅在Seq中显示为

Customer {}
Run Code Online (Sandbox Code Playgroud)

如果我将“名称”字段更改为一个属性,则可以使用,但我目前不希望这样做。有什么办法解决吗?

.net c# seq serilog

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

使用属性丰富 Seq 日志语句,而不将它们包含在消息行中(使用 Serilog)

我正在将 Serilog 与 Seq 一起使用,并希望使用我自己的属性来丰富 Seq 中出现的日志记录。

如果我输入一个日志语句,如...

Log.Information("ProcessCycle {Site} {Activity}", SiteName, ActivityName);
Run Code Online (Sandbox Code Playgroud)

在 Seq 我得到...

在此处输入图片说明

请注意,站点和活动值在 Seq 中显示为丰富的属性,但它们也显示在整体消息中。

如何记录获取丰富属性的位置,但文本消息行中没有显示值?请注意,我有 NuGet 包,它为每个调用添加了一个 ThreadId。我希望 Site 和 Activity 属性位于丰富的道具列表中,但不一定打印在消息行中。

对此的答案可能还需要了解我们的应用程序。

该应用程序是一个 Windows 服务,它产生多个做不同事情的活动。因此,Windows 服务编排了其中包含的各种活动。按照计划,它只是在每个活动上调用“流程”来完成一些工作。每次流程被编排器调用时,我都需要该 Activity 的所有日志记录以自动包含如上所示的 Site 和 Activity 值(以及更多属性值,但我不希望它们全部打印在消息行中)。

因此,我们将看到的不是上面的条目,而是... 注意消息现在只显示为“ProcessCycle”。

在此处输入图片说明

.net c# logging serilog seq-logging

2
推荐指数
1
解决办法
841
查看次数

如何为 .NET Core 3.0 Worker Service 设置 serilog SEQ

日志记录正在运行,但没有发布到我的本地 seq,我尝试添加 serilog 并使用 Serilog 但它没有登录到我的本地服务:相关问题

.csproj

<ItemGroup>
<PackageReference Include="Microsoft.AspNet.Mvc" Version="5.2.7" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.0.0" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.0.1" />
<PackageReference Include="Serilog" Version="2.8.0" />
<PackageReference Include="Serilog.AspNetCore" Version="3.0.0" />
<PackageReference Include="Serilog.Extensions.Hosting" Version="3.0.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="3.0.1" />
<PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="4.6.0" />
Run Code Online (Sandbox Code Playgroud)

程序

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureLogging(loggingBuilder => {
                loggingBuilder.AddEventLog();
                loggingBuilder.AddSerilog();
            })
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<Worker>();
            })
            .UseSerilog();
Run Code Online (Sandbox Code Playgroud)

appSettings.json:

"Serilog": {
"LevelSwitches": { "$controlSwitch": "Verbose" },
"MinimumLevel": { …
Run Code Online (Sandbox Code Playgroud)

serilog .net-core-3.0 seq-logging

2
推荐指数
1
解决办法
4753
查看次数

标签 统计

serilog ×7

c# ×4

seq-logging ×4

.net ×2

seq ×2

.net-core-3.0 ×1

asp.net-core ×1

autofac ×1

getseq ×1

logging ×1