无法在Azure Log Stream中查看Web API自定义Trace日志问题
解决Azure App Service中看不到
System.Diagnostics.Trace自定义日志的问题 嘿,我来帮你搞定这个日志不显示的麻烦!你现在遇到的问题是用System.Diagnostics.Trace.TraceInformation写的日志没出现在Azure的Log Stream里,虽然已经开了Application Logging (Filesystem)且级别设为Information对吧?原因在于Trace类的日志默认并没有和ASP.NET Core的日志系统集成,所以Azure的日志捕获机制抓不到它。下面给你两种解决办法:
方法一:改用ASP.NET Core标准的ILogger(推荐)
这是最符合ASP.NET Core框架规范的做法,也能完美适配Azure的日志系统,步骤很简单:
- 在你的
ValuesController中注入ILogger依赖:
private readonly ILogger<ValuesController> _logger; public ValuesController(ILogger<ValuesController> logger) { _logger = logger; }
- 把原来的Trace日志代码替换成ILogger的调用:
// 替换掉 System.Diagnostics.Trace.TraceInformation("in get..."); _logger.LogInformation("in get...");
- 重新发布你的应用到Azure,调用
api/values/5接口后,去Log Stream里切换到Application Logs标签,就能看到这条自定义日志啦。
方法二:保留Trace代码,添加日志桥接配置
如果你不想修改现有代码,那需要配置让Trace的日志转发到ASP.NET Core的日志系统里,这样Azure才能捕获到:
- 打开项目的
Program.cs(如果是老版本.NET Core就是Startup.cs),添加Trace日志的桥接配置:
对于.NET 6+的Program.cs:
var builder = WebApplication.CreateBuilder(args); // 添加Trace源监听器,将Trace日志转发到ILogger builder.Logging.AddTraceSource( new SourceSwitch("TraceSource", "Information"), new ConsoleTraceListener() ); // 其他原有配置代码... var app = builder.Build(); // 中间件配置... app.Run();
- 重新发布应用后,
Trace.TraceInformation的日志就会被转发到Azure的应用日志中,你就能在Log Stream里看到了。
额外检查点
- 确认Azure App Service的Log Stream页面切换到了Application Logs标签,别选错成Web Server Logs或者其他标签啦。
- 再次确认Application Logging (Filesystem)的日志级别是Information,如果设成Warning或更高,Information级别的日志会被过滤掉。
内容的提问来源于stack exchange,提问作者Drake
相关产品推荐
相关产品推荐

