【问题标题】:ILogger in asp.net 5 not working when deployed to IIS on Server 2019部署到 Server 2019 上的 IIS 时,asp.net 5 中的 ILogger 无法正常工作
【发布时间】: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


【解决方案1】:

您是否检查过是否有任何特定于环境的文件,例如 appsettings.development.json?因为在iis中设置asp.net应用,所以应该使用appsettings.development.json而不是appsettings.json。

你应该修改 appsettings.development.json 如下:

{
 "Logging": {
   "LogLevel": {
     "Default": "Trace",
     "Microsoft": "Warning",
     "Microsoft.Hosting.Lifetime": "Information"
   }
 }
}

【讨论】:

  • 那是simply wrong。始终使用appsettings.jsonappsettings.Production.json 也是如此,如果它存在,则可以覆盖生产中的设置。 Development 和 Staging 使用only if the DOTNET_ENVIRONMENT or ASPNETCORE_ENVIRONMENT 设置环境变量,只是为了覆盖设置。在生产服务器上appsettings.Development.json 将被忽略
  • @samwu ...谢谢!日志记录级别和类别对问题没有影响。在 VS(调试和发布模式)中测试时,我将日志事件添加到日志文件中。问题是当我将应用程序发布到服务器时。我已经尝试了多种在 appsettings.json 和 abSoundAPI.runtimeconfig.json 中设置日志级别的方法。到目前为止,没有任何影响。 ://
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-09
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 2020-11-17
  • 2019-03-31
相关资源
最近更新 更多