【问题标题】:Only write logs for custom logging只为自定义日志写入日志
【发布时间】:2020-05-18 10:33:45
【问题描述】:

我正在关注这篇文章: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1

我正在尝试仅在 asp.net core 3.1 API 中记录我自己的自定义日志记录。并非所有从 asp.net 核心生成的日志。我创建了一个空白天气预报服务:

[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
    _logger.LogTrace("LogTrace");
    _logger.LogDebug("LogDebug");
    _logger.LogInformation("LogInformation");
    _logger.LogError("LogError");

    var rng = new Random();
    return Enumerable.Range(1, 5).Select(index => new WeatherForecast
    {
        Date = DateTime.Now.AddDays(index),
        TemperatureC = rng.Next(-20, 55),
        Summary = Summaries[rng.Next(Summaries.Length)]
    })
    .ToArray();
}

appsettings.json:

{
  "Logging": {
    "LogLevel": {
      "Default": "Trace",
      "Microsoft": "Trace",
      "TestAPI": "Trace"
    },
    "ApplicationInsights": {
      "InstrumentationKey": "xx-xx-x-x-xx",
      "LogLevel": {
        "Default": "Trace",
        "Microsoft": "Trace",
        "TestAPI": "Trace"
      }
    }
  },
  "AllowedHosts": "*"
}

我在 2.14.0 版本中都安装了以下 nuget: Microsoft.Extensions.Logging.ApplicationInsights Microsoft.ApplicationInsights.AspNetCore

现在我尝试运行应用程序,但没有日志。

我尝试添加 services.AddApplicationInsightsTelemetry();启动:

public void ConfigureServices(IServiceCollection services)
{
    services.AddApplicationInsightsTelemetry();
    services.AddControllers();
}

同样没有日志。

【问题讨论】:

    标签: asp.net-core asp.net-core-webapi microsoft-extensions-logging


    【解决方案1】:

    首先,请注意,ApplicationInsights 键意味着两个非常不同的东西,具体取决于它在 JSON 文件中的位置。

    如果密钥位于 JSON 根级别(即您所谓的“外部”),则它用于配置 Application Insights,并且您可以在其中指定检测密钥。它看起来像这样:

    {
      "ApplicationInsights": {
        "Instrumentationkey":"xxx-36a5-4687-b1fc-xxxxxx"
      }
    }
    

    其次,如果它位于 Logging 部分内,则它用于配置 ApplicationInsightsLoggerProvider,它决定将哪个日志级别发送到 Application Insights。这就是ILogger log filtering 机制。

    默认情况下,只有warning 或更高级别的日志才会发送到应用洞察。如果您只想将所有日志发送到应用程序洞察,您可以为您的命名空间配置它,或者忽略来自 SystemMicrosoft 命名空间的消息:

    {
      "Logging": {
        "ApplicationInsights": {
          "LogLevel": {
            "Default": "Trace"
            "System": "None",
            "Microsoft": "None"
          }
        }
    }
    

    【讨论】:

    • 我被另一个答案迷住了。你完全正确。钥匙必须在外面!
    【解决方案2】:

    首先,无需将这些提供程序设置放在“日志记录”之外(您不应该这样做)。
    您想要的每个日志记录设置都应该只放在里面(除非有一个提供程序配置为专门读取它)

    现在回答您的问题,假设您的应用程序的根命名空间是MyNetCore。 (与项目名称类似)。

    如果您使用的是 Visual Studio,您可以从项目属性 -> 应用程序 -> 默认命名空间查看项目的根命名空间

    要仅从您的应用程序查看日志,您必须将默认日志记录级别设置为None,并将项目的日志记录级别MyNetCore 设置为Trace
    [编辑:您已分别为ApplicationInsights(或任何其他提供程序)设置了日志记录级别。默认是kestrel。]

    "Logging": {
        "LogLevel": {
            "Default": "None",
            "MyNetCore": "Trace"
        },
        "ApplicationInsights": {
            "InstrumentationKey": "xxx-36a5-4687-b1fc-xxxxxx",
            "LogLevel": {
                "Default": "None",
                "MyNetCore": "Trace"
            }
        }
    }
    

    此处设置的日志记录级别为minimum 级别。
    如果您将其设置为 Trace (0),则会显示所有日志级别(大于 0)。即从InformationCritical
    如果将其设置为无 (6),则不会显示任何日志
    参考不同的日志级别:https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.logging.loglevel

    如果您只想查看来自 asp.net 核心的错误,以及来自您的应用程序的每个日志级别,那么您可以这样做。

    "Logging": {
        "LogLevel": {
            "Default": "None",
            "Microsoft": "Error",
            "MyNetCore": "Trace"
        },
        "ApplicationInsights": {
            "InstrumentationKey": "xxx-36a5-4687-b1fc-xxxxxx",
            "LogLevel": {
                "Default": "None",
                "Microsoft": "Error",
                "MyNetCore": "Trace"
            }
        }
    }
    

    编辑:要阅读上述ApplicationInsights 配置,您需要安装Microsoft.Extensions.Logging.ApplicationInsights nuget 包。否则配置将被完全忽略。

    【讨论】:

    • 谢谢我刚刚测试过。跟随我没有得到任何日志。 { "Logging": { "LogLevel": { "Default": "None", "Microsoft": "Error", "VendorFormAPI": "Trace" }, "ApplicationInsights": { "InstrumentationKey": "xxx", " LogLevel": { "Default": "Trace" } } },
    • 那可能和我的配置有关。我由 Startup.cs 添加。
    • 您必须单独设置 ApplicationInsights 的日志级别。 {"Logging":{"LogLevel":{"Default":"None","Microsoft":"Error","VendorFormAPI":"Trace"},"ApplicationInsights":{"InstrumentationKey":"xxx-36a5-4687-b1fc-xxxxxx","LogLevel":{"Default":"None","Microsoft":"Error","VendorFormAPI":"Trace"}}}} 至于startup.cs,您不需要做任何其他事情来设置日志记录。
      但是,请确保您已安装 Microsoft.Extensions.Logging.ApplicationInsights nuget 包以从配置文件中读取。否则将无法正常工作。
    • 我觉得我已经尝试了所有组合:D 我已经安装了 Microsoft.ApplicationInsights.AspNetCore。我从启动中删除了与洞察力相关的所有内容。我有以下“记录”:{“LogLevel”:{“默认”:“无”,“Microsoft”:“错误”,“VendorFormAPI”:“Trace”},“ApplicationInsights”:{“InstrumentationKey”:“”, "LogLevel": { "Default": "None", "Microsoft": "Error", "VendorFormAPI": "Trace" } } }, 仍然没有日志:( 只有当我有内部和外部日志时我才有日志. 但后来我把所有东西都记录下来了。
    • 和 Microsoft.Extensions.Logging.ApplicationInsights
    猜你喜欢
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多