如何在 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) 我确实去了 "App Service Logs" 并启用了 "Application Logging (Filesystem)"。 3) 我还在 "App Service Logs" 中启用了 "Detailed error messages"。 4) 我试过 "Diagnostic settings (preview)" 但在那里找不到输出。 5) 我查看了应用程序日志的 "Log Stream",但那里什么也没有显示 6) 在 "Logs" 下,我只有这条消息:"We didn’t find any logs" 7)"metrics"和"Alerts"都没有这个日志输出

我开始怀疑这在 Azure 中不支持。我是否需要添加一个像 serilog 这样的日志记录框架,以便一次性向可能的应用程序添加一条语句,如 "You hit line 20"?我真的只是想要一些快速而肮脏的东西,但是在花了几个小时之后,"quick" 部分没有发生。

是的,仅 .NET 核心不支持此(控制台或跟踪输出)。您应该按照以下步骤使用 ILogger

Startup.cs -> Configure方法中,重写Configure方法如下:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
       //your other code

        //add the following 2 lines of code.
        loggerFactory.AddConsole();
        loggerFactory.AddDebug();


        app.UseStaticFiles();

        //your other code
    }

然后在HomeController.cs(例如)中添加如下代码:

 public class HomeController : Controller
 {
    private readonly ILogger _logger; 

    public HomeController(ILoggerFactory loggerFactory)
    {
        _logger = loggerFactory.CreateLogger<HomeController>();
    }

    public IActionResult Index()
    {
        _logger.LogInformation("this is a information from ILogger...");

        return View();
    }

    //other code

  }

如果您还有其他问题,请告诉我。

我终于自己弄明白了。我需要添加配置 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,要让您的消息显示在 "Log Stream" 中,您需要在 Azure 的 "App Service Logs" 部分中启用 "Application Logging"。在您的代码中,您需要参考:

使用 Microsoft.Extensions.DependencyInjection;

使用 Microsoft.Extensions.Logging.AzureAppServices;

此外,就我而言,我正在使用 Blazor/SignalR 并且没有 MVC 控制器,因此我不知道如何在我的 class 中访问日志记录框架。我确信有更好的方法,但是通过在下面的代码中公开 ILogger,我能够从我的代码库中的任何地方引用它。

我有一个静态方法调用写入日志(当我在我的电脑上积极调试时控制台,或 Azure "Log Stream" 当 运行 在 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>();
            });
    }

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

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

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

在您的代码中,您只需调用

System.Diagnostics.Trace.TraceInformation("My message!")

System.Diagnostics.Trace.WriteLine("My message!")

就是这样!

这里我附上一些截图:

您可以打开 Kudu 并查看 Console.WritLine 输出。从门户打开它或:

https://your_app_name_on_azure.scm.azurewebsites.net/api/logstream

不要忘记在 azure 中启用日志: