如何在 ASP.NET Core 中启用跟踪日志记录?

2024-05-01

我无法获得基本知识LogTrace(...)我的应用程序中的输出。这是一个重现:

  1. 使用 Visual Studio 2017 创建新的 ASP.NET Core 应用程序。
  2. (可选)注释掉.UseApplicationInsights()所以重现更清晰
  3. 将代码替换为ValuesController.cs有了这个:

    using System.Collections.Generic;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Logging;
    
    namespace WebApplication1.Controllers
    {
        [Route("api/[controller]")]
        public class ValuesController : Controller
        {
            private readonly ILogger<ValuesController> logger;
    
            public ValuesController(ILogger<ValuesController> logger)
            {
                this.logger = logger;
            }
    
            [HttpGet]
            public IEnumerable<string> Get()
            {
                logger.LogError("ERROR!");
                logger.LogWarning("WARN!");
                logger.LogInformation("INFO!");
                logger.LogTrace("TRACE!");
                return new string[] { "value1", "value2" };
            }
        }
    }
    
  4. Change appsettings.Development.json对此:

    {
      "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
          "Default": "Trace",
          "System": "Information",
          "Microsoft": "Information"
        }
      }
    }
    
  5. 运行并查看调试输出

这导致:

  • 实际输出:

  • 预期输出将是“TRACE!”也留言

我尝试调整中的值appsettings.json文件也是如此,但这也没有效果。

奇怪的是,将任一文件中的值更改为"Error"也不做任何事情。

底线/问题

我需要做什么才能注射ILogger<ValuesController>尊重日志记录设置,包括Trace level?


Footnote

以下是使用上述重现自动生成的一些相关代码:

Startup.cs

public class Startup
{
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }

    public IConfigurationRoot Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddMvc();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        app.UseMvc();
    }
}

Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .UseApplicationInsights()
            .Build();

        host.Run();
    }
}

appsettings.json默认:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  }
}

自 2.0 起的重大变更
正如 Tseng 在下面评论的那样,这个答案将变成自 2.0 起已过时您可以在此处找到有关此公告的更多信息:https://github.com/aspnet/Announcements/issues/238 https://github.com/aspnet/Announcements/issues/238


问题出在哪里...

根据您的Configure()方法,我发现一个问题:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
    ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug(); // ⇦ you're not passing the LogLevel!

    app.UseMvc();
}

这就是为什么您没有对配置集进行任何更改的原因appsettings.json文件不工作。

默认行为.AddDebug()没有任何参数传递的是
添加为 LogLevel.Information 或更高级别启用的调试记录器。

如果您想显式地将其设置为使用特定的最小 LogLevel,那么您可以将其直接传递给AddDebug(ILoggerFactory, LogLevel) method.

loggerFactory.AddDebug(LogLevel.Trace);

更多信息可以找到here https://learn.microsoft.com/en-us/aspnet/core/api/microsoft.extensions.logging.debugloggerfactoryextensions.


将其绑定到您的配置。

方法1:从配置中获取值。

LogLevel foo = this.Configuration.GetSection("Logging:LogLevel")
    .GetValue<LogLevel>("Default");
loggerFactory.AddDebug(foo);

方法2:使用LogLevel的内置对象

(故意省略。显然它位于所提供的这两种方法之间。)我宁愿选择极端之一而不是半途而废)

方法3:手动(使用ConfigurationBinder)

奇特的ConfigurationBinder

var obj = new MyObject();
ConfigurationBinder.Bind(_configuration.GetSection("Logging:LogLevel"), obj);

它将映射到一个像这样的对象

public class MyObject
{
    public LogLevel Default { get; set; }
    public LogLevel System { get; set; }
    public LogLevel Microsoft { get; set; }
}

这样你就可以通过:

loggerFactory.AddDebug(obj.Default);

关于节点和 appsettings.json 的特别说明

请注意,配置的分隔符使用:.

例子:"Logging:LogLevel"会去:

"Logging": {
  "IncludeScopes": false,
  "LogLevel": {             ⇦⇦⇦⇦⇦ Here
    "Default": "Debug",
    "System": "Information",
    "Microsoft": "Information"
  }
}

日志级别枚举

仅供参考,以下是有效的LogLevel values:

public enum LogLevel
{
    Trace = 0,
    Debug = 1,
    Information = 2,
    Warning = 3,
    Error = 4,
    Critical = 5,
    None = 6,
}

Source:
https://learn.microsoft.com/en-us/aspnet/core/api/microsoft.extensions.logging.loglevel#Microsoft_Extensions_Logging_LogLevel https://learn.microsoft.com/en-us/aspnet/core/api/microsoft.extensions.logging.loglevel#Microsoft_Extensions_Logging_LogLevel

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 ASP.NET Core 中启用跟踪日志记录? 的相关文章

随机推荐

  • hg Convert --authors errorUsers <-- 文件的格式是什么?

    Related here https stackoverflow com questions 732819 can i change the username on a mercurial changeset 757604 757604 指
  • 在 JS 中查找对象上特定值的键

    我有一个使用 lodash 生成的对象 zipObject 功能 所以我有 2 个数组 一个是位置 一个是数字 var locs Aberdeen 304 Aberystwith 109 Belfast 219 Birmingham 24
  • 如何使用 CSS 创建菱形内的标题?

    我想创建一种风格处理 类似于 这样的事情如何运作 使用 CSS 变换 您可以使用两个伪元素和 CSS 旋转变换来创建菱形形状 如下面的代码片段所示 这将使文本不受变换的影响 因此定位它会相对容易 The rotateZ 45deg 产生等边
  • r-base 和 r-推荐包之间的区别

    谁能告诉我基本包和推荐包之间有什么区别 如果有提到基本包和推荐包的链接 请提供链接 差异实际上来自 R Core 和 R 代码的组织方式 例如在上游 SVN 存储库中 In src library 您拥有所有 基本 包 base 编译器 数
  • 如何构建具有动态元素数量的 JSON?

    我需要构造一个看起来像这样的 JSON 对象 见下文 棘手的部分之一是 accountInfo 是动态的 因为会有 0 到多个键值对 zipCode 123 name bob partner from someCompany account
  • 如何在 HtmlUnit (java) 中禁用或指定重试次数?

    我希望连接重置后不会再次执行 HtmlUnit 中的 Web 请求 以下异常消息显示正在重试连接 INFO I O exception java net SocketException caught when connecting to t
  • 自定义用户代理字符串或标头,无需修改 cordova 库

    我有一个与 ASP NET MVC Web 应用程序交互的 Android Phonegap Cordova 应用程序 我正在尝试检测服务器端是否从浏览器或我的 Phonegap Cordova 应用程序加载网页 我考虑过以下几种方法 更改
  • 谷歌文档文本光标

    我需要创建一个类似于谷歌文档的应用程序 我发现 google 文档不使用任何文本区域 而是使用常规 div 来创建页面 但我不知道他们是如何获得文本光标的 是图像闪烁吗 因为当我尝试使用 Chrome 开发者工具查看网页代码时 我没有看到任
  • 可选择的圆形图像视图,如 Google+

    如何创建一个可选择的循环ImageView就像当前用于个人资料图片的 Google 应用程序一样 这就是我所指的 上图未选中 下图已选中 我尝试一比一复制个人资料图片 到目前为止我的工作 loadedImage is the Bitmap显
  • PHP 删除 JavaScript

    我正在尝试从 HTML 中删除 JavaScript 我无法让正则表达式与 PHP 一起使用 它给了我一个空数组 为什么
  • 如何获取 Jupyter Notebook 的“markdown”单元格中的制表符空间

    我正在编写描述性 ipynb 文件 需要在带有空格的 markdown 中给出输出 但无法添加制表符空间来打印结构化数据 键入 nbsp 以添加一个空格 输入 ensp 添加 2 个空格 输入 emsp 添加 4 个空格 使用不间断空格 n
  • initdb.bin:无效的区域设置;检查 LANG 和 LC_* 环境变量

    当我尝试安装时比特纳米奥多 9在我的 ubuntu 系统中通过终端 我收到以下错误消息 如何解决这个问题 initdb bin invalid locale settings check LANG and LC environment va
  • 如果子节点为空,则删除父节点

    源 XML
  • Hibernate 在运行时更改获取模式

    我有两个使用一对多关系关联在一起的表 雇员 gt 部门 通过雇员表中的department id建立关系 我使用 hibernate 我的 hibernate 映射文件是
  • Rails meta_search gem:按关联模型的计数排序

    我正在使用 meta search 对表中的列进行排序 我的表列之一是特定模型的关联记录的计数 基本上是这样的 class Shop lt ActiveRecord Base has many inventory records def c
  • GWT 将表单参数发送到 servlet

    我正在尝试捕获 servlet 中接下来的两个突出显示的字段 我可以在其中获取上传的文件 源代码与中所示的完全相同GWT FormSubmit 类 Javadoc http google web toolkit googlecode com
  • 如何通过 JavaScript 访问屏幕显示的 DPI 设置? [复制]

    这个问题在这里已经有答案了 有没有办法在 Javascript 函数中访问屏幕显示的 DPI 设置 我试图在页面上放置一个 HTML 面板 当用户的 DPI 设置为大 120 时 它会丢失该位置 我需要知道 DPI 是多少 以便我可以相应地
  • 在 LanguageTool 中,如何创建字典并使用它进行拼写检查?

    如何使用语言工具创建用于拼写检查的词典 我不是 Java 程序员 这是我第一次看到 LT 您好 这是我使用语言工具创建拼写检查词典的经验 希望你喜欢它 Part 1 如何创建字典 你需要 包含字典的 txt 文件 一个 info 文件 指定
  • python请求模块和连接重用

    我正在使用 python 的请求模块进行 HTTP 通信 我想知道如何重用已经建立的 TCP 连接 requests 模块是无状态的 如果我重复调用同一个 URL 的 get 不是每次都会创建一个新连接吗 Thanks 全局函数如reque
  • 如何在 ASP.NET Core 中启用跟踪日志记录?

    我无法获得基本知识LogTrace 我的应用程序中的输出 这是一个重现 使用 Visual Studio 2017 创建新的 ASP NET Core 应用程序 可选 注释掉 UseApplicationInsights 所以重现更清晰 将