问题标签 [microsoft.extensions.logging]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net-core - ASP.NET Core 中的 TraceId、RequestId 和 TraceIdentifier
我想知道 ASP.NET Core 和 Microsoft.Extensions.Logging 如何分配TraceId
、RequestId
和TraceIdentifier
. 在向我的网站发出请求后查看我的日志时,我看到从 Microsoft.Extensions.Logging 记录的以下信息:
我还通过自定义中间件记录 ASP.NET Core 发生的错误。在与上述相同的请求中,我在同一个日志中看到一个错误,其中包含以下信息:
该值看起来像 ASP.NET Core 分配的请求 GUID,这在查看Microsoft.Extensions.Logging80000389-0006-ee00-b63f-84710c7967bb
中的属性时是有意义的。RequestId
但是 ASP.NET Core 记录请求 idTraceIdentifier
感觉有点奇怪。
在从 ASP.NET Core 中间件进行自定义日志记录时,我个人更喜欢TraceId
在属性中使用 Microsoft.Extension.Logging 的值。TraceIdentifier
任何输入将不胜感激。
更新-自从写了这个问题以来,我确实在 GitHub 上创建了一个问题,该问题几乎被忽略,然后由于不活动而关闭:( https://github.com/dotnet/aspnetcore/issues/31747
c# - MS 扩展日志记录“LogError”方法抛出异常“索引(基于零)必须大于或等于零”?
“Microsoft.Extensions.Logging.LoggerExtensions.LogError”正在抛出异常
索引(从零开始)必须大于或等于零且小于参数列表的大小。
代码:
LogError 方法所需的所有参数都在函数调用期间传递。
程序集
Microsoft.Extensions.Logging.Abstractions
版本
2.2.0.0
提前致谢!
c# - System.Exception:找不到方法:'ILoggerFactory.AddConsole(Microsoft.Extensions.Logging.ILoggerFactory,Microsoft.Extensions.Logging.LogLevel)'
我正在尝试将 .netcore 框架从 2.2 升级到 3.1 。但我也想在 3.1 中使用 IHostingEnvironment、IWebHostBuilder 和 AddNewtonsoftJson。(我知道它们应该被替换,但如果我这样做,将需要代码重构,我现在不需要)。
当我使用 swagger 执行 api 时,收到 500 错误消息:
无法解析 JSON。原始结果:System.Exception:找不到方法:'Microsoft.Extensions.Logging.ILoggerFactory Microsoft.Extensions.Logging.ConsoleLoggerExtensions.AddConsole(Microsoft.Extensions.Logging.ILoggerFactory, Microsoft.Extensions.Logging.LogLevel)'。
这是堆栈跟踪的开始
失败:Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1] 执行请求时发生未处理的异常。System.MissingMethodException:找不到方法:'Microsoft.Extensions.Logging.ILoggerFactory Microsoft.Extensions.Logging.ConsoleLoggerExtensions.AddConsole(Microsoft.Extensions.Logging.ILoggerFactory,Microsoft.Extensions.Logging.LogLevel)'。
我只在 Program.cs 中配置 Logger。
appsettings.json 中的配置
我不明白为什么它不起作用。
注意:我在这个项目中有 6 个 API,其中 1 个成功完成上述更改,5 个失败并出现上述错误。
c# - .net5.0 PRISM WPF 应用程序,如何使用 Microsoft.Exensions.Logging 和 Serilog 作为提供者?
我有一个 PRISM (8.1.97) WPF 应用程序在 .net5.0 上运行,带有统一容器。
我想做的是将 Serilog 指定为我的日志记录提供程序,但Microsoft.Extensions.Logging
通过我的 DI 注册服务的构造函数注入常用的记录器(例如,仅ILogger<MyService> logger
在构造函数中使用)。
其中,第二个是最直接的。基本上,您添加Prism.Container.Extensions,然后在 App.xaml.cs 中覆盖 CreateContainerExtension()。这为您提供了一种访问服务集合的方法,看起来就像您使用内置的 .net 5 DI 获得的一样。
在 App.xaml.cs 我的 App 类下面...
以上似乎是合理的,但问题是当我尝试注入一个记录器时,例如在 MainWindow(Prism Shell)中,它Container.Resolve<MainWindow>();
在 App.xaml.cs 的 CreateShell() 中给出了一个异常。
这是我的 MainWindow.xaml.cs 类,当我尝试注入记录器时......
异常是一个Prism.Ioc.ContainerResolutionException
并且最显着的内部异常是......
没有可用于类型 System.IServiceProvider 的公共构造函数。
我想我搞砸了一些事情,但我不确定我是否在正确的轨道上。似乎CreateContainerExtension()
从 Prism.Container.Extensions 覆盖的意图是给我一个 IServiceCollection,可以像在 Microsoft 的 .net 5 的 DI 中一样使用它。我是否误解了它?
c# - 记录到每个对象的单独文件(MS Logging/Serilog)
我正在开发一个程序,该程序创建一个或多个独立但同时工作的工人阶级。我希望改进日志记录,但为了便于阅读,希望每个工作对象都写入单独的日志文件。
我最初的计划是使用 Microsoft.Extensions.Logging.ILogger 通过 DI 使用 Serilog,但目前尚不清楚如何正确配置 Serilog,假设它是可能的。WriteTo.Map
似乎很接近,但似乎无法获得我可能正在处理的对象的动态数量,并且需要一个在注入的 ILogger 对象中不可用的 propertyName 字符串。
在下面我一直在测试的模型中,我希望为每个 Worker 对象生成一个单独的日志文件,例如 worker0.log、worker1.log 等。
核选项似乎是在每个 Worker 对象中配置一个单独的 LoggerFactory 但我认为这太过分了。有没有一种简单的方法可以使用一个 LoggerFactory 来实现这一点?
主班
工人阶级
asp.net-core - 如何使用 ILogger 检查当前日志级别?
我正在使用Microsoft.Extensions.Logging.ILogger
. 我只想在 LogLevel 设置为时记录请求对象Information
我知道我可以将请求对象记录为
我Serilog
用作记录器。这会按预期将对象和日志请求序列化为 json 字符串。但是我不知道 Logging 框架是先检查日志级别然后序列化还是总是先序列化然后检查日志级别。因为如果 LogLevel 设置为高于 Information,我不想在每次调用时序列化对象。
无论如何检查 LogLevel 使用Microsoft.Extensions.Logging.ILogger
c# - ASP .NET Core 日志记录 API 是否具有创建类似于 Serilog“ForContext”方法的独立记录器的方法?
在 Serilog 中是如何工作的
ILogger
Serilog 中的每一个都有有用的方法,ForContext
它基本上创建了完全独立的子记录器,并附加了一些属性。
这对我的情况很有用,当在一个 ASP .NET Core 主机内有 N 个独立的设备 API 运行时,每个 API 都管理一些物理连接的设备。每个 API 都可以拥有它自己的ILogger
,其中包含类似的属性DeviceName = "Device1"
,因此可以在 Seq/Greylog/etc 中设置适当的过滤器。
工作原理 ASP .NET Core 日志记录 API
但是,如果使用ILogger
from Microsoft.Extensions.Logging
,则该方法没有直接对应物ForContext
。据我所知,唯一的选择是BeginScope
,不幸的是,它不会创建新的隔离记录器实例,而是将值添加到全局记录器范围。
为了缓解这个问题,使用了 AsyncLocal 和 SynchronizationContext等工具。据我了解,这适用于关联 HTTP 请求之类的事情,因为它们通常具有清晰的异步处理管道。
但是,在我的例子中,每个设备 API 在任务池调度程序上运行一系列有点复杂的 Rx .NET 可观察序列。即使可以保留所有这些SynchronizationContext
,这也会引入很多不必要的复杂性。
问题
有没有办法创建独立的记录器和/或记录器工厂,每个都有自己的范围/状态?因此,与 Serilog 类似,任何使用此类记录器的东西都将附加附加属性,而不管调用线程或其他任何东西,但这些属性对应用程序中的任何其他记录器都是不可见的?
还是应该只使用Serilog.ILogger
Microsoft API 而不是 Microsoft API,因为这个应用程序目前不使用 Web API 功能?
c# - 如何从应用服务向 Azure 上的 EventHub 发送日志
我有一些用 ASP.NET Core net5.0编写的示例应用程序。我将此应用程序部署在 Azure 上作为Windows操作系统上的应用服务。我想在 EventHub 上查看我的自定义日志。
在诊断设置中,我添加了 EventHub 和 LogAnalitics(启用了所有类型的日志)。我启用了应用程序日志记录:App Service logs。在 LogAnalitics 我只看到:LogAnalitcs type of logs。我尝试使用不同类型的记录器,当我在本地运行我的应用程序时可以看到我的控制台日志,但是在 Azure 上部署之后,我看不到我引入的任何日志。
目前是否可以将日志发送到 ASP.NET Core 中的 EventHub?
.net - .NET 非主机 LoggerFactory 配置
我正在尝试将日志记录添加到现有的 .NET Framework 应用程序。我添加了自己的记录器(称为 MyLogger)并将配置设置放入 appsettings.json,如下所示:
我可以像这样读取配置设置:
我想保持简单,不使用主机。我可以像这样创建 LoggerFactory:
如何将 appsettings.json 中的配置设置连接到 LoggerFactory?例如,在上面的代码中,LogInformation() 不应该记录任何内容,因为我的 appsettings.json 将 MyLogger 的最低日志级别设置为 Error。
.net - 如何将 Microsoft.Extensions.Logging.Abstraction 5.0.0 与 Azure Durable Functions 一起使用
我正在使用 Azure Functions,但遇到了涉及 NuGet“Microsoft.Extensions.Logging.Abstractions”的问题。我的解决方案运行得非常好,但最近我添加了一个依赖于“Microsoft.Extensions.Logging.Abstractions 5.0.0”的依赖项。该项目构建良好,但是当我运行它时。出现以下错误:“无法加载文件或程序集 'Microsoft.Extensions.Logging.Abstractions,版本 = 5.0.0.0”。
我在Github 问题上找到了一些与此相关的信息。我发现的建议是:
- 将“Microsoft.Extensions.Logging.Abstractions”降级到版本 3.1.0。我不能这样做,因为我有一个第三方依赖项,它引用了相同的 NuGet,但版本为 5.0.0。
- 升级到 .NET 5.0。我不能这样做,因为我需要使用 Durable Functions,而带有 .NET 5.0 的 Azure Functions 尚不支持这些功能。
我也尝试使用同一个 NuGet 的多个版本,但我得到了同样的错误(我尝试了这个链接中提到的方法)。
有没有办法解决这个问题?
更新:我创建了一个可以重现问题的最小示例。它位于这里。分支功能/WithLogging3按预期运行,但功能/WithLogging5失败并显示消息“'主机尚未启动”。如果我启用使用公共语言运行时异常中断调试器的选项,我会收到错误消息“无法加载文件或程序集'Microsoft.Extensions.Logging.Abstractions,版本 = 5.0.0.0,文化 = 中性,PublicKeyToken = adb9793829ddae60'。该系统找不到指定的文件”。
似乎只有在将 ILogger 注入函数时,该项目才会失败。例如,这个(直接取自 Visual Studio 2019 Template for Azure Functions with .NET Core 3.1):
如果我删除注入的 ILogger(以及方法中使用记录器的行),则项目运行良好。但是,我需要使用记录器。
我知道我提供的示例不包含持久函数,但它重现了该问题,即使您将持久函数添加到项目中,或者将当前函数替换为需要注入的持久函数,它也会重现记录仪。
顺便说一句,如果它有任何改变,我使用的是 Visual Studio 2019(企业版)。