如何在Azure应用程序服务中查看控制台或跟踪输出?Console.WriteLine或Trace.TraceError [英] How can I view console or trace output in an azure app service? Console.WriteLine or Trace.TraceError
问题描述
我以为这很简单,但几个小时后我意识到并非如此。我在Azure上部署了一个"App Service",它是一个C#.Net Core。
我正在尝试使用Console.WriteLine("My Message")或Trace.TraceError("My Message")添加一些由应用程序进行的粗略监视,但我在Azure中的任何地方都找不到该输出。
我尝试启用Application Insights,但也没有找到输出。
我只是想以最简单的方式了解一下我的应用程序中的一行代码被击中了。最简单的方法是什么?
我尝试过的事情: 1)我进入Azure的控制台,浏览了可能有这种输出的每个文件,但没有找到任何文件。当然,LogFiles下的任何文件和文件夹中都没有任何内容。 2)我确实进入了"应用程序服务日志"并启用了"应用程序日志(文件系统)"。 3)我还在App Service日志中开启了详细的错误消息。 4)我尝试了"诊断设置(预览)",但没有找到那里的输出。 5)我查看了应用程序日志的"日志流",但没有显示任何内容 6)在"日志"下,我只看到这样一条消息:"我们没有找到任何日志。" 7)"指标"和"警报"都没有此日志输出
我开始怀疑这在Azure中不受支持。我是否需要添加一个像serilog这样的日志记录框架,就为了给May应用程序添加一条语句,比如"你命中了第20行"?我真的只想要一些又快又脏的东西,但在花了几个小时之后,"快"的部分并没有发生。
推荐答案
我终于自己想明白了。我需要添加配置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控制器,因此我不知道如何访问我的类中的日志记录框架。我确信有更好的方法,但通过公开下面代码中的ILogger,我能够从我的代码库中的任何地方引用它。我调用了一个静态方法来写入日志(在PC上主动调试时为控制台,或在Azure中运行时为Azure"日志流":
public static void WriteToLog(string message)
{
Program.Logger.LogError(message);
}
My 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>();
});
}
这篇关于如何在Azure应用程序服务中查看控制台或跟踪输出?Console.WriteLine或Trace.TraceError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!