我在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
我在做什么错了?
答案 0 :(得分:2)
我在这里添加了对Steeltoe的serilog支持:https://github.com/SteeltoeOSS/Logging/pull/4
让我知道它是否可以解决您的问题。
答案 1 :(得分:1)
Steeltoe.Extensions.Logging.DynamicLogger是C:\>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混合使用时才起作用)。