在Azure日志流中看不到日志

时间:2020-02-09 06:11:15

标签: azure

在我的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)与 参数(5)-ModelState有效2020-02-09 06:08:07.160 +00:00 [信息] Microsoft.AspNetCore.Mvc.Internal.ObjectResultExecutor: 执行ObjectResult,写入值 Microsoft.AspNetCore.Mvc.ControllerContext。

但是我看不到我的日志“ ...”

2 个答案:

答案 0 :(得分:2)

这是.NET核心的known issue(但对于.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";
    }
}

答案 1 :(得分:0)

Ivan的答案在aspnetcore 3.1上对我来说并不完全有效,但它使我引向了这篇文章,该文章为我提供了我需要的所有信息:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1

相关问题