You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core中System.Diagnostics.Trace无法输出至Azure Log Stream问题

问题分析与解决方案

你遇到的情况确实是ASP.NET Core和.NET Framework在日志系统集成上的差异导致的——ASP.NET Core默认不会将System.Diagnostics.Trace的输出转发到内置日志管道,而Azure App Service的Log Stream是监听ASP.NET Core内置日志系统的输出,所以直接用Trace.WriteLine这类方法写的日志不会出现在Log Stream里;而.NET Framework中Trace和IIS/Azure的日志体系是默认打通的,所以能正常显示。

下面给你几个可行的解决办法:

方法一:改用ASP.NET Core内置的ILogger接口(推荐)

这是ASP.NET Core的标准日志方式,天然支持Azure Log Stream,用法也很简单:

  1. 在控制器中注入ILogger:
private readonly ILogger<YourController> _logger;

public YourController(ILogger<YourController> logger)
{
    _logger = logger;
}
  1. 用ILogger输出日志:
_logger.LogInformation("Wrote info log at {Time}", DateTime.Now.ToLongTimeString());
_logger.LogError("Wrote error log at {Time}", DateTime.Now.ToLongTimeString());

这种方式不需要额外配置,只要你已经在Azure启用了Application Logging,日志就会自动出现在Log Stream中。

方法二:桥接System.Diagnostics.Trace到ASP.NET Core日志系统

如果你不想修改现有代码,想继续用System.Diagnostics.Trace,可以通过配置让Trace的输出进入Core的日志管道:

  1. 安装NuGet包:Microsoft.Extensions.Logging.TraceSource

  2. 在Program.cs中配置日志服务,添加TraceSource的桥接:

var builder = WebApplication.CreateBuilder(args);

// 添加TraceSource日志桥接,将Trace输出转发到Core日志系统
builder.Logging.AddTraceSource(
    new SourceSwitch("TraceSwitch", "Information"), // 设置日志级别,可根据需求调整
    new Microsoft.Extensions.Logging.TraceSource.TraceListenerAdapter()
);

// 其他应用配置...
var app = builder.Build();

这样System.Diagnostics.Trace的输出就会被转发到ASP.NET Core的日志系统,进而在Azure Log Stream中显示。

方法三:检查Azure App Service的日志级别配置

确保你在Azure Portal的Diagnostic Logs中,不仅启用了Application Logging (Filesystem),还设置了合适的日志级别(比如“Information”或更低)。如果级别设得太高(比如只选“Error”),那Info级别的Trace消息也不会被Log Stream捕获。

配置完成后,记得重启你的Azure App Service应用,让配置生效,再测试Log Stream就能看到日志了。

内容的提问来源于stack exchange,提问作者sakura-bloom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:41:04