【发布时间】:2021-09-16 17:15:12
【问题描述】:
我有一个使用 asp.net 5 的简单 Web API。我添加了一个跟踪侦听器,以便在我添加调试时 ILogger 输出到一个文件。这在调试和发布模式下的测试(在 VS2019 中)都可以正常工作。但是当我将它部署到 IIS 时,它什么也没输出。它确实设法创建了日志文件,但从不往里面放任何东西。
我的 appsettings.json 在 dev 中和在 Prod 中是一样的......我还需要另一个文件吗?
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}
这也是我的 abSoundAPI.runtimeconfig.json
{
"runtimeOptions": {
"tfm": "net5.0",
"framework": {
"name": "Microsoft.AspNetCore.App",
"version": "5.0.0"
},
"configProperties": {
"System.GC.Server": true,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Information",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}
这是我的程序类:
public static void Main(string[] args)
{
TextWriterTraceListener fileOutListener = new("abSoundAPI.log", "fileOutListnener");
Trace.Listeners.Add(fileOutListener);
Trace.AutoFlush = true;
try
{
CreateHostBuilder(args).Build().Run();
}
catch (Exception e)
{
Trace.WriteLine($"Fatal Exception {e.Message}");
throw new Exception("Failed to start!");
}
finally
{
//Trace.Flush();
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((context, logging) =>
{
logging.ClearProviders(); // see comments in code F12 on the CreateHostBuilder above
logging.AddConfiguration(context.Configuration.GetSection("Logging"));
logging.AddDebug();
logging.AddConsole();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
【问题讨论】:
-
你为什么要添加跟踪监听器?除非您使用过滤,否则相同的日志事件将发送到所有提供程序。默认提供程序包括控制台、调试和事件日志。如果要记录到文件,请添加文件提供程序。要解决启动问题,您可以将控制台(标准输出)重定向到文件 through the aspNetCore tag in web.config settings。
-
@PanagiotisKanavos,很好奇.. 是否有一些新的内置提供程序可以进一步扩展它?根据 MS Docs Console,EventSource、EventLog 和 Debug 是唯一的。我添加了侦听器,以便调试提供程序除了调试控制台之外还可以输出到一个文件。我不知道 web.config 设置..我会试一试..谢谢!
-
@PanagiotisKanavos ,所以 web.config 设置似乎工作正常,但这不是我要找的......这似乎更适合调试整个应用程序(启动)......不是针对警告/严重级别事件的正常生产日志记录。但我确实学到了一些东西! :)
-
但这正是您所问的 - 如何将调试输出重定向到文件。这不是在生产中完成的,通常仅在附加调试器时完成。正是出于这个原因,
Debug从未用于生产日志记录。在发布版本中,Debug类甚至不会记录任何内容 -
您的真实问题是如何在启动期间记录的吗?
标签: asp.net-core logging iis-10 asp.net5 ilogger