ASP.NET Core 应用程序日志未写入 Azure 应用服务中的 Blob

Posted

技术标签:

【中文标题】ASP.NET Core 应用程序日志未写入 Azure 应用服务中的 Blob【英文标题】:ASP.NET Core Application Logs Not Written To Blob in Azure App Service 【发布时间】:2018-04-09 04:22:46 【问题描述】:

我已为 Azure 上的应用服务启用应用程序日志记录到 blob。

我可以从 Azure 门户查看日志流中的日志 我可以看到在我创建的 Azure 存储帐户中每小时都会创建一个类似 xxxxx-#####.applicationLog.csv 的文件,但该文件实际上并不包含我的应用程序日志 我尝试在同一个帐户上启用 Web 服务器日志记录到存储,这确实有效 - 我可以在不同的文件中看到 HTTP 请求的日志 我尝试创建一个新的存储帐户并将其指向日志,但没有任何改变

配置详情:

该应用使用 ASP.NET Core 2,在 .NET Framework 4.6.1 上运行 我通过.ConfigureLogging(log => log.AddAzureWebAppDiagnostics()) 配置登录Program.cs(在.NET Framework 而不是.NET Core 运行时运行时显然是必需的)

总结:当我在 Azure 门户中以这种方式配置 Azure 存储时,不会在 Azure 存储中创建包含我的应用程序日志的文件。

【问题讨论】:

见:docs.microsoft.com/en-us/azure/app-service/…。确保您已按照那里的所有步骤进行操作。特别注意您设置的日志记录级别。默认值为“信息”,因此如果您一直在记录“调试”,那么这些都不会真正被记录。 日志级别设置为详细。 您实际上是如何登录您的应用程序的? 使用 Microsoft.Extensions.Logging;即注入ILogger<Type> 您的应用是在 Azure 中运行还是在本地运行? 【参考方案1】:

如果我们想将应用程序日志写入 Azure blob 存储,首先我们需要在 Azure 门户上启用应用程序日志并为其配置 blob 存储。

我们可以关注blog 在 Asp.net 核心应用中设置日志记录。

在 ASP.NET Core 应用程序中设置日志记录不需要太多代码。 ASP.NET Core 新项目模板已经在 Startup.Configure 方法中使用此代码设置了一些基本的日志记录提供程序:

loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
loggerFactory.AddDebug();

我也为它做演示。它在我这边工作正常。

1.在Sartup.cs文件中添加如下代码

 loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();
            loggerFactory.AddAzureWebAppDiagnostics(
                new AzureAppServicesDiagnosticsSettings
                
                    OutputTemplate = "Timestamp:yyyy-MM-dd HH:mm:ss zzz [Level] RequestId-SourceContext: MessageNewLineException",

                
            );

2.在 HomeController.cs 中添加如下代码

 private readonly ILogger _logger;
 public HomeController(ILoggerFactory loggerFactory)
 
     _logger = loggerFactory.CreateLogger<HomeController>();
 

 public IActionResult Index()
 
    _logger.LogInformation("Log information");
    _logger.LogError("Logger error");
    return View();
 

3.访问主页/索引页面并从 Azure 存储 blob 中进行检查。日志 blob 名称的最后一部分。默认为“applicationLog.txt”。我们也可以自己设置。

【讨论】:

问题似乎是我在 Program.cs 中调用 AddAzureWebAppDiagnostics() 而不是 Startup.cs。不知道为什么这个项目不能在那个配置中工作,因为我有其他的 .Net Core 2 App Services 设置,但是哦,好吧。谢谢! @Zout 可以将日志保存到 csv 而不是 txt 吗?换句话说,日志可以保存在块 blob 中而不是附加 blob 中吗?

以上是关于ASP.NET Core 应用程序日志未写入 Azure 应用服务中的 Blob的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net Core 1 日志记录错误 - 找不到来自源应用程序的事件 ID xxxx 的描述

在 ASP.NET Core 2.2 中使用 InProcess 托管模型时,Serilog 不会将日志写入文件

C# ASP.NET Core Serilog 添加类名和方法到日志

记一个ASP.Net Core配置文件问题

如何在 ASP.NET Core 中使用 NLog 的高级特性

允许 ASP.NET Core API 应用程序的写入权限