Microsoft.Extensions.Logging 对比自然对数

2024-03-10

我看到很多帖子提到将 Microsoft.Extensions.Logging 与 NLog 一起使用。

我想更好地了解 Microsoft.Extensions.Logging 的用途是什么?

具体来说为什么需要它或者与 NLog 一起使用它有什么好处?


使用 NLog 你可以这样做:

var logger = NLog.LogManager.GetCurrentClassLogger();
logger.Info("Hello {Name}", "Earth");

这适用于所有平台和所有框架。

Microsoft.Extensions.Logging

通过 .NET Core,Microsoft 引入了ILogger抽象 https://github.com/NLog/NLog.Extensions.Logging/wiki/NLog-GetCurrentClassLogger-and-Microsoft-ILogger来自 Microsoft.Extensions.Logging。您可以在项目中使用该日志记录抽象并将其与 NLog 集成。

例如,在 ASP.NET Core 中,您可以注入Microsoft.Extensions.Logging.ILogger<HomeController>并且可以将日志发送到 NLog。 (看ASP.NET Core 2 入门 · NLog/NLog Wiki https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-2)

using Microsoft.Extensions.Logging;

public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;

    public HomeController(ILogger<HomeController> logger)
    {
        _logger = logger;
    }

    public IActionResult Index()
    {
        _logger.LogInformation("Index page says hello {Name}", "Universe");
        return View();
    }

Packages

对于 NLog 和 Microsoft.Extensions.Logging 有以下包:

  • .NET 核心日志记录抽象位于包中Microsoft.Extensions.Logging.Abstractions https://www.nuget.org/packages/Microsoft.Extensions.Logging.Abstractions/
  • 这些抽象的 NLog 集成位于包中NLog.扩展.日志记录 https://www.nuget.org/packages/NLog.Extensions.Logging/。您可以将此包用于 .NET Core 控制台应用程序。
  • 对于ASP.NET Core,有一个优化包NLog.Web.AspNetCore https://www.nuget.org/packages/NLog.Web.AspNetCore它使用 NLog.Extensions.Logging

比较

NLog 优点

直接使用 NLog 的优点

  • 最棒的表演
  • 记录器 API 的更多选项,例如Logger.WithProperty(..)
  • 适用于所有平台
  • 无需依赖注入,从而节省了复杂性。

Microsoft.Extensions.Logging 的优点

通过 Microsoft.Extensions.Logging 使用 NLog 的优点:

  • 与 ASP.NET Core 完全集成,例如Microsoft 还会写入记录器 API,并且 NLog 也会捕获(并可能过滤)
  • 写入日志抽象将使您的代码独立于日志库。
  • 与 .NET Core 依赖注入配合良好
  • new: 你可以使用 appsettings.json 配置 NLog https://github.com/NLog/NLog.Extensions.Logging/wiki/NLog-configuration-with-appsettings.json- 所以用 JSON 而不是 XML

更新:添加-将 NLog 与 appsettings.json 结合使用 https://github.com/NLog/NLog.Extensions.Logging/wiki/NLog-configuration-with-appsettings.json

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

Microsoft.Extensions.Logging 对比自然对数 的相关文章

  • Python 记录类型错误

    你能帮帮我吗 出了什么问题 import logging if name main logging basicConfig format asctime s levelname s module s funcName s message s
  • 代码与日志的比率? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 理想的代码与日志记录比率是多少 我不习惯编写日志 因为我开发的大多数应用程序都没有太多日志记录 最近 虽然我换了工作 但我注意到您看不到调用 l
  • Log4J 仅将一个类附加到附加程序

    我需要定期轮询正在运行的应用程序的 JVM 内存统计信息 我正在运行一个服务来执行此操作并将统计信息写入根记录器 我对根记录器的使用与否没有太多控制权 我想要做的是将这些日志消息路由到单个附加程序 该附加程序应该只处理来自该类的日志消息 而
  • java.util.logging.Logger 不尊重 java.util.logging.Level?

    在普通 Java SE 6 环境中 Logger l Logger getLogger nameless l setLevel Level ALL l fine somemessage Eclipse 控制台中没有显示任何内容 l info
  • Windows 应用程序的日志写入位置

    我有一个通过 ClickOnce 部署到 Web 服务器的 NET Windows 应用程序 在任何给定时间大约有 100 个用户 全部位于中心位置 我正在使用 log4net 登录应用程序 但无法找到放置日志的最佳位置 我尝试过让它们写入
  • 使用 doctest 并登录 python 程序

    usr bin python2 4 import logging import sys import doctest def foo x gt gt gt foo 0 0 print d x logger debug d x def tes
  • Tomcat 上的 Grails - 如何记录原始 HTTP 请求/响应

    我找不到配置我的虚拟教程 Grails 应用程序来记录 Grails 服务器 实际上是 Tomcat 接受 生成的所有 HTTP 请求和响应的方法 这可能吗 另一种选择是使用 tomcat 的内置访问日志记录 http tomcat apa
  • 无法让 grizzly 日志记录工作,没有任何内容写入我的 log4j 日志文件

    我有一个简单的 Java Spring 程序 使用标准 log4j properties 文件来控制日志记录 工作正常 当我们通过以下方式添加 Grizzly 时 GrizzlyHttpServerFactory createHttpSer
  • 当两个脚本实例同时写入日志时,为什么 Monolog 写入的日志行不会混乱/混合?

    当使用 Monolog 时StreamHandler 这是正常情况 PHP 脚本的多个实例会并行写入同一个日志文件 例如 在我的 Symfony 应用程序中 当多个用户同时打开 登录页面 时 会导致我的应用程序脚本出现多个实例 app ph
  • 应用程序日志保存在哪里? [复制]

    这个问题在这里已经有答案了 可能的重复 Windows 上应用程序日志文件的存储位置 https stackoverflow com questions 1572934 where to store an application log f
  • 如何以编程方式获取 iOS 应用程序中的日志消息?

    我正在使用中定义的方法https developer apple com documentation os logging https developer apple com documentation os logging在 iOS 应用
  • 无法获取 GED 日志缓冲区,错误(0)

    我的 Android 项目有一个大问题 那就是error Failed to get GED Log Buf err 0 我真的不知道该怎么办以及如何解决它 有人可以帮我吗 非常感谢 Find Advanced logging在你手机的De
  • 配置 logback 以遵循 Java 配置,即 Logback 的纯 Java 配置

    我只是不喜欢 Logback 的 XML 或 Groovy 配置 更喜欢用 Java 进行配置 这也是因为我将在初始化后的不同时间在运行时更改配置 似乎对 Logback 进行 Java 配置的唯一方法是进行某种初始化劫持根追加器 http
  • WSO2 ESB 中的跟踪日志文件

    在 WSO2 ESB 中 它到底显示 wso2 esb trace log 文件什么 什么时候有用 并且 与 WSO2 ESB 中的其他典型日志文件有何不同 例如 使用 wso2 esb service log 或 wso2 esb err
  • 并发 log4j

    我有自己的日志引擎 它将日志写入带有阻塞队列的单独线程上 为了使用 标准软件 我正在考虑切换到 log4j 我不希望我的高并发软件因日志命令而变慢 这些日志命令在调用命令时将所有内容写入磁盘 log4j 可以用作垃圾箱吗 Log4j 是大多
  • Python 记录器不遵守设定的级别

    我在Python3交互式提示符下创建了一个记录器 gt gt gt import logging gt gt gt logger logging getLogger foo gt gt gt logger setLevel logging
  • Graylog2-如何将日志保留配置为 1 周

    我们正在使用一些 Graylog2 服务器 graylog server 版本 1 3 4 因为我们收到太多的日志消息 所以需要大量的内存 我正在尝试将日志保留时间减少到 1 周 所有超过 1 周的日志消息都将被删除 但是 我无法在配置文件
  • grails 中的 log4j:在附加程序配置中使用变量时打印错误

    我在 grails 2 3 4 中使用 slf4j DailyRollingFileAppender 当我尝试使用变量作为 文件 参数的一部分时 grails 总是在应用程序启动时打印一些错误日志 但是我的应用程序的日志消息可以按预期打印到
  • 如何将堆栈跟踪发送到 log4j?

    假设您捕获了一个异常 并在标准输出 例如控制台 上得到以下内容 如果您执行e printStackTrace java io FileNotFoundException so txt at java io FileInputStream
  • 如何在IntelliJ中快速输入记录器定义?

    是否有一些实时模板或其他东西可以将记录器定义添加到类中 在 Eclipse 中我有一个模板 private static final Logger log LoggerFactory getLogger enclosing type cla

随机推荐

  • fft后如何在C上均衡

    首先感谢您花时间回答 我的问题是下一个 我尝试使用 fft 快速傅立叶变换 在 C 上构建均衡器 因为现在我能够在向量 音频样本 上正确应用 fft 对其进行归一化 然后应用逆 fft 因为这里一切都好 但是当我尝试修改 fft 的结果 以
  • 如何从组件内的单点捕获 vuejs 错误

    我有一个使用大量 axios 的组件then catch 在捕获中我总是抛出console error like axios get then catch error gt console error 还有其他一些地方我也抛出错误 我正在寻
  • LabelEncoder指定DataFrame中的类

    我正在将 LabelEncoder 应用于 pandas DataFrame df Feat1 Feat2 Feat3 Feat4 Feat5 A A A A E B B C C E C D C C E D A C D E 我将标签编码器应
  • 如何解析 Netlogo 中的字符串?

    Context 对于我的模型 我希望有一个输入 用户可以在其中输入一系列值 E g 我希望从上面显示的输入中得到一个由五个数字组成的列表 例如 0 5 0 2 0 0 2 0 5 这样我就可以使用他们输入的数字进行一些计算 问题 不幸的是
  • 设置 SQL_MODE="NO_AUTO_VALUE_ON_ZERO";给出一个错误

    我的 mysql 数据库有问题 我无法从我的朋友那里导入数据库 我需要一些帮助 SET SQL MODE NO AUTO VALUE ON ZERO SET time zone 00 00 ERROR 声明的开头出人意料 靠近位置 0 的
  • GUID 可以多短?

    我知道标准 GUID 它们可以变得更短吗 其背后的理论是什么 Greg Dean 的答案是正确的 但为了了解 GUID 是如何生成的以及为什么不应该缩短它 我强烈建议您阅读下面的文章 新旧事物 GUID 是全局唯一的 但 GUID 的子字符
  • 如何扩展从npm包导入的vue组件?

    如果您有通过 Node 安装的 vue 组件 node modules vendor somecomponent vue 有什么方法可以修改 扩展该组件的模板 方法吗 Update 尝试下面的示例后 我遇到了这个问题 我在用https gi
  • VB.NET:哪个 As 子句与带有 Option Strict On 的匿名类型一起使用?

    考虑始终声明的要求Option Strict On 我们总是需要用As关键词 匿名类型的类型是什么 例子 Dim product As New With Key Name paperclips Price 1 29 接下来会发生什么As 尝
  • 使用 .NET Framework 或 Windows API 检测 Windows 11

    在 NET Framework 中 获取可以使用的操作系统版本Environment OSVersion与Major and Minor告诉您 Windows 版本的值 即 6 1 Windows 7 10 0 Windows 10 尽管
  • 在不创建主题的情况下更改 emacs 中特定文本的颜色

    是否可以选择您正在编辑的一段文本并更改其颜色 我知道可以创建一个颜色主题来为某些类型的文本着色 例如某种编程语言中的着色函数 但是是否可以对特定 emacs 中的选定文本片段进行一次性颜色更改不创建主题的文档 提前致谢 在任何情况下 主题都
  • 无法访问对象原型上的方法

    我可以创建一个Cat对象并在其原型上设置一个方法来打印猫的名字 var log function message var results result results append p message p function Cat name
  • 从 OnActionExecuting 重定向到外部 url?

    我需要从 OnActionExecuting 方法重定向到外部网址 比方说 www google com 现在我正在使用这样的东西 public override void OnActionExecuting ActionExecuting
  • 如何使用变换原点让 svg 元素从中心旋转? [复制]

    这个问题在这里已经有答案了 我正在尝试对 svg 矩形元素进行非常简单的旋转 我希望这个元素相对于它的中心旋转 我试图使用transform origin属性来实现这一点 参见代码片段 尽管尝试使用 center 或 50 从中心旋转 但它
  • 使用 sql 查询在 hibernate 中创建新的对象实例

    我正在尝试使用查询在 hibernate 中创建一个对象 然后该对象将被保存回表示该类的表中 hbm xml 文件摘录
  • Django simple_tag 和设置上下文变量

    我正在尝试使用 simple tag 并设置上下文变量 我使用的是 django 的 trunk 版本 from django import template register simple tag takes context True d
  • strstr 不工作

    如果我输入 test 为什么这段特定的代码在 strstr 上返回 false char input 100 int main fgets input 100 stdin printf s input if strstr test mess
  • Perl 中有正则表达式来查找文件扩展名吗?

    Perl 中有正则表达式来查找文件扩展名吗 例如 如果我有 test exe 我怎样才能得到 exe my file test exe Match a dot followed by any number of non dots until
  • Ubuntu 上的 JAVA_HOME 定义不正确?

    我正在尝试在 Ubuntu 14 04 中安装一些软件 Shibboleth 我已经安装了 Java 7 OpenJDK usr lib jvm 我有这些行 usr environment JAVA HOME usr lib jvm jav
  • SQLite,将数据集/数据表复制到数据库文件

    我已经用创建的表填充了数据集another数据库文件 该表不在我希望能够将表复制到的数据库文件中 现在我想将所有这些记录 DataTable 保存到新创建的 SQLite 数据库文件中 我怎样才能做到这一点 另外 如果可能的话 我真的想避免
  • Microsoft.Extensions.Logging 对比自然对数

    我看到很多帖子提到将 Microsoft Extensions Logging 与 NLog 一起使用 我想更好地了解 Microsoft Extensions Logging 的用途是什么 具体来说为什么需要它或者与 NLog 一起使用它