如何在 azure 应用服务中查看控制台或跟踪输出?Console.WriteLine 或 Trace.TraceError

Rob*_*aft 10 console logging trace azure

我以为这很简单,但几个小时后才意识到事实并非如此。我向 Azure 部署了一个“应用服务”,它是一个 C# .Net Core。

我试图通过使用 Console.WriteLine("my message") 或 Trace.TraceError("my message") 添加一些粗略的应用程序监控,但我在 Azure 中的任何地方都找不到该输出。

我尝试启用 Application Insights,但也没有在那里找到输出。

我只想用最简单的方法来了解我的应用程序中的一行代码受到了攻击。什么是最简单的方法?

我尝试过的事情:1)我进入 Azure 中的控制台并浏览到每个可能有这种输出但没有找到任何文件的文件。LogFiles 下的任何文件和文件夹中当然都没有。2)我确实转到“应用服务日志”并启用了“应用程序日志记录(文件系统)”。3)我还在“应用服务日志”中启用了“详细错误消息”。4)我尝试了“诊断设置(预览版)”,但在那里找不到输出。5) 我观看了应用程序日志的“日志流”,但没有显示任何内容 6) 在“日志”下,我只收到以下消息:“我们没有找到任何日志” 7) “指标”和“警报”都没有这个日志输出

我开始怀疑 Azure 不支持此功能。我是否需要添加一个像 serilog 这样的日志框架,以便一次向可能的应用程序添加一条语句,例如“您点击第 20 行”?我真的只是想要一些快速而肮脏的东西,但是在花了几个小时之后,它的“快速”部分并没有发生。

ben*_*dos 15

我所做的只是在 Azure 门户中启用应用服务日志。

具体来说,我在“详细”级别打开了“应用程序日志记录(文件系统)”,然后在“Web 服务器日志记录”选项中选择了“文件系统”

然后您可以使用左侧栏中的“日志流”来显示应用程序日志。

在你的代码中你只需要调用

System.Diagnostics.Trace.TraceInformation("My message!")
Run Code Online (Sandbox Code Playgroud)

或者

System.Diagnostics.Trace.WriteLine("My message!")
Run Code Online (Sandbox Code Playgroud)

就是这样!

这里我包括一些屏幕截图:

所选选项的屏幕截图

日志流

  • 我遵循了完全相同的设置,但没有任何运气! (8认同)
  • 谢谢,这个答案很有帮助。另外,值得一提的是,您可以使用 Kudo 控制台在 Azure 门户中下载应用服务日志文件。要打开 Kudo 控制台,请导航到 Azure 中的应用服务,单击“开发工具”|“开发工具”|“应用程序服务”。高级工具。打开 Kudo 后,单击“调试控制台”菜单并选择“CMD”。此时,您应该在页面顶部看到一个文件夹视图,允许您访问/下载文件和文件夹(即 LogFiles 或 LogFiles/http)。 (2认同)

Rob*_*aft 6

我终于自己弄清楚了。我需要添加配置 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";
    })
)
Run Code Online (Sandbox Code Playgroud)

总之,对于 .Net Core 3.1,要让消息显示在“日志流”中,您需要在 Azure 的“应用程序服务日志”部分中启用“应用程序日志记录”。在您的代码中您需要引用:

使用 Microsoft.Extensions.DependencyInjection;

使用 Microsoft.Extensions.Logging.AzureAppServices;

另外,就我而言,我使用 Blazor/SignalR 并且没有 MVC 控制器,因此我无法弄清楚如何访问类中的日志框架。我确信有更好的方法,但是通过像下面的代码一样公开 ILogger,我可以从代码库中的任何位置引用它。

我有一个静态方法来写入日志(当我在我的电脑上主动调试时使用控制台,或者在 Azure 中运行时使用 Azure“日志流”:

public static void WriteToLog(string message)
{
    Program.Logger.LogError(message);
}
Run Code Online (Sandbox Code Playgroud)

我的 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>();
            });
    }
Run Code Online (Sandbox Code Playgroud)