我终于自己弄明白了。我需要添加配置 AzureFileLoggerOptions。如果没有这些选项,Azure 输出中不会显示任何内容。
.ConfigureLogging(logging => logging.AddAzureWebAppDiagnostics())
.ConfigureServices(serviceCollection => serviceCollection
.Configure<AzureFileLoggerOptions>(options =>
{
options.FileName = "azure-diagnostics-";
options.FileSizeLimit = 50 * 1024;
options.RetainedFileCountLimit = 5;
}).Configure<AzureBlobLoggerOptions>(options =>
{
options.BlobName = "log.txt";
})
)
总而言之,对于 .Net Core 3.1,要让您的消息显示在“日志流”中,您需要在 Azure 的“应用服务日志”部分启用“应用程序日志记录”。在您的代码中,您需要参考:
使用 Microsoft.Extensions.DependencyInjection;
使用 Microsoft.Extensions.Logging.AzureAppServices;
另外,就我而言,我正在使用 Blazor/SignalR 并且没有 MVC 控制器,因此我无法弄清楚如何在我的班级中访问 Logging 框架。我确信有更好的方法,但是通过在下面的代码中公开 ILogger,我可以从代码库中的任何位置引用它。
我调用了一个静态方法来写入日志(当我在我的电脑上主动调试时是控制台,或者在 Azure 中运行时是 Azure“日志流”:
public static void WriteToLog(string message)
{
Program.Logger.LogError(message);
}
我的 Program.cs 中的代码如下所示:
public class Program
{
public static ILogger Logger;
public static void Main(string[] args)
{
//CreateHostBuilder(args).Build().Run();
var host = CreateHostBuilder(args).Build();
var LoggerF = LoggerFactory.Create(builder =>
{
builder.AddFilter("BlazorDiceRoller", LogLevel.Warning)
.AddConsole().AddAzureWebAppDiagnostics()
.AddFilter("Microsoft", LogLevel.Warning)
.AddFilter("System", LogLevel.Warning);
});
Logger = LoggerF.CreateLogger<Program>();
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging => logging.AddAzureWebAppDiagnostics())
.ConfigureServices(serviceCollection => serviceCollection
.Configure<AzureFileLoggerOptions>(options =>
{
options.FileName = "azure-diagnostics-";
options.FileSizeLimit = 50 * 1024;
options.RetainedFileCountLimit = 5;
}).Configure<AzureBlobLoggerOptions>(options =>
{
options.BlobName = "log.txt";
})
)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}