如何将Steeltoe动态日志记录设置为与第三方记录器一起用作Serilog?

时间:2018-10-19 11:19:35

标签: asp.net-core-2.1 pivotal-cloud-foundry serilog steeltoe

我在Pivotal Cloud Foundry中拥有ASP.NET Core 2.1应用程序,我们希望能够动态配置日志记录级别。作为记录器提供商,我们正在使用Serilog。 Steeltoe动态日志记录可能与第三方记录器一起正常工作吗?

这是我尝试过的:

在Program.cs中:

WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY

在appsettings.json

 public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseCloudFoundryHosting()
            .ConfigureLogging((builderContext, loggingBuilder) =>
             {
                 loggingBuilder.AddDynamicConsole();
             })
            .UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
                        .ReadFrom.Configuration(hostingContext.Configuration))
            .UseStartup<Startup>();

}

在appsettings.Development.json中:

"Serilog": {
"WriteTo": [
  {
    "Name": "Console",
    "Args": {
      "outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {SourceContext}: {Properties} {NewLine} {EventId} {Message:lj}{NewLine}{Exception}"
    }
  }
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]

在“配置日志记录级别”中只有此内容: Configure logging levels screenshot

我在做什么错了?

4 个答案:

答案 0 :(得分:2)

我在这里添加了对Steeltoe的serilog支持:https://github.com/SteeltoeOSS/Logging/pull/4

让我知道它是否可以解决您的问题。

答案 1 :(得分:1)

Steeltoe.Extensions.Logging.DynamicLoggerC:\>sqrt.bat Number: 25 Number: 25 Answer: 5 Press any key to continue . . . Number: 36 Number: 36 Answer: 6 Press any key to continue . . . Number: 49 Number: 49 Answer: 7 Press any key to continue . . . Number: 56 Number: 56 Answer: 8 Press any key to continue . . . 的包装。如今,它打算与允许多个ILoggerProviders的Microsoft日志记录系统一起使用。

Serilog会将自身插入日志记录管道中,并且不允许其他ILoggerProviders使用,因此将其添加到带有Steeltoe Management和DynamicLogger的应用程序中将破坏Steeltoe在运行时更改日志级别的能力。

安德鲁·洛克(Andrew Lock)用一些details on how Serilog plugs itself in写了一篇不错的文章。

答案 2 :(得分:0)

我想您可以尝试使用LoggerFactory而不是LoggingProvider来并行拥有多个可用的Logging提供程序,以便Steeltoe仍可以包装ConsoleLoggerProvider,同时您的Serilog可以按预期运行...

为什么不以本文为例尝试快速POC(您只需向其中添加Steeltoe和PCF平台的内容并尝试):

https://www.codeproject.com/Articles/1217036/Console-Logging-and-Reading-Excel-Files-with-NET-C

({This other issue with NLog与您在Steeltoe Github回购中的问题有关,它给了我一个主意,我认为值得尝试)

希望对您有帮助!

答案 3 :(得分:0)

我已经在同一个问题上工作了几个小时:注册Serilog以及其他日志提供程序(在我的情况下为 Nlog )。

除了Serilog的默认行为(替换所有其他日志提供程序)之外,Serilog还提供了一种通过其Api注册其他LogProvider的方法。

创建Serilog记录器并通过Serilog Api在Serilog旁边将NLog注册为日志提供程序的代码在我的情况下是这样的:

string str = "James: 8, John: 8, Jasmin: 12, Igor: 1.54, Garry: 0, Gabe: 0.12, Lauren: 0, Grace: 81.31";

var values = str.Split(',',':');
(string name, double value)[] result = new (string, double)[values.Length/2];
for (int i = 0; i < values.Length; i+=2)
    result[i/2] = (values[i].Trim(), Convert.ToDouble(values[i+1]));

使用Serilog时需要注册其他日志提供程序的是日志提供程序的一个对象,该对象实现了pd.Series.dropna接口。 您可以将实现ILoggerProvider的对象的集合传递到Serilog Logger,它们应该起作用(至少在我将NLog和Serilog混合使用时才起作用)。