[英]Can't see logs in Azure Log Stream
在我的 Web Api 應用程序中,我有控制器:
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
[HttpGet("{id}")]
public string Get(int id)
{
System.Diagnostics.Trace.TraceInformation("in get...");
return "value";
}
}
當我發布它時,我希望能夠在 Azure 上看到“in get...”日志。 在 Azure 上,在App Service Logs
我打開Application Logging (Filesystem)
並將級別設置為Information
。 在Log Stream
,當我轉到該方法的 url 時,我在日志中看到:
正在連接... 2020-02-09T06:07:38 歡迎您,您現在已連接到日志流服務。 默認超時為 2 小時。 使用應用程序設置 SCM_LOGSTREAM_TIMEOUT(以秒為單位)更改超時。 2020-02-09 06:08:07.158 +00:00 [信息] Microsoft.AspNetCore.Hosting.Internal.WebHost:請求開始 HTTP/1.1 GET http://testapi20200208104448.azurewebsites.net/api/values/5 2020 02-09 06:08:07.159 +00:00 [信息] Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:使用參數執行操作方法 TestApi.Controllers.ValuesController.Get (TestApi) - ModelState is Valid 2020-02 -09 06:08:07.160 +00:00 [信息] Microsoft.AspNetCore.Mvc.Internal.ObjectResultExecutor:執行 ObjectResult,寫入值 Microsoft.AspNetCore.Mvc.ControllerContext。
但是我沒有看到我的日志“in get ...”
這是 .NET 核心的一個已知問題(但對於 .NET 框架,它可以很好地工作)。
作為 .NET 核心 Web 應用程序的解決方法,我建議您可以使用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
}
然后在ValuesController
:
public class ValuesController : Controller
{
private readonly ILogger _logger;
public ValuesController(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<ValuesController>();
}
// GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
[HttpGet("{id}")]
public string Get(int id)
{
//System.Diagnostics.Trace.TraceInformation("in get...");
//use ILogger here.
_logger.LogInformation("in get...");
return "value";
}
}
Ivan 的回答在 aspnetcore 3.1 上並不完全適合我,但它讓我看到了這篇文章,它為我提供了我需要的所有信息:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.