- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Microsoft.Extensions.Logging (MEL) 中的 ConsoleLoggerProvider
在 .NET 6 控制台应用程序中写入日志。
我希望我的日志包含每个日志条目的“类”和“方法”记录,以便知道日志消息是从我的代码中的“何处”写入的。
在不使用 Serilog 等第三方日志记录解决方案的情况下,当前唯一的方法是使用 MEL 中“日志范围”的内置功能。</p>
所以我最终写了这样的代码:
public class MyClass {
ILogger _logger;
.... //Contructor, etc.
public void MyMethod()
{
using (_logger.BeginScope($"{nameof(MyClass)} => {nameof(MyMethod)}"))
{
...//actual logic is here
}
}
}
我在 MS 文档中观察到“ExternalScopeProviders”的概念,但它完全没有记录且没有示例。是否有更多“隐式”方式自动设置代码结构范围?或者我们(作为 .NET 6/C# 用户)是否必须在我们的代码中显式使用 using (_logger.BeginScope)
来实现这一点?
最佳答案
更现代的方法是使用自动生成方法名称和位置的函数。您可以为此创建一个扩展方法:
public void Log(this ILogger logger, LogLevel logLevel, string message, [CallerMemberName]string memberName = null, [CallerFilePath]string filePath = null, [CallerLineNumber]int line = 0)
{
logger.Log(logLevel, $"In function {memberName} ({filePath}:{line}): {message}");
}
(对于 ILogger
接口(interface)的其他函数也类似)
编译器自动在memberName
中插入成员名(不带类/命名空间),在filePath
中插入源文件,在line
中插入行号> 如果您不在调用站点手动填写它们。不幸的是,没有简单的方法可以通过这种方式获取调用函数的类名,但它通常与文件名相同,所以这不是什么大问题。
关于c# - ILogger 的隐式范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70918224/
我有记录到 Microsoft.Extensions.Logging.ILogger 的代码(主要是扩展方法)。 我已将 Serilog 配置为实际进行日志记录。 我找不到将 Serilog.ILog
这可能与Pass ILogger or ILoggerFactory to constructors in AspNet Core?有点关系,但是这是专门针对库设计的,而不是关于使用这些库的实际应用程
我一直在尝试将 .net core 库项目引用到我的 Azure 函数项目中,以调用 .net core 类库中定义的进程之一。 .net core 库项目使用 ILogger。 但是,每当我尝试运行
如果类 T 包含对 ILogger 的依赖,则依赖关系已解决: public class Foo { private ILogger _logger; public Foo(ILogg
我已经将 vs 2019 用于控制台应用程序(dotnet core 3.1), Install-Package Microsoft.Extensions.Logging.Console -Versi
使用Microsoft.ApplicationInsights.AspNetCore v2.6.1使用 .net core v2.2.2,我可以看到 Azure Application Insight
我正在尝试在我的 Azure 函数中使用 Serilog.ILogger。我正在设置它,以便我可以添加自定义属性。当我尝试运行 Azure 函数时,会弹出控制台窗口并显示以下错误: [2021-03-
我正在使用 Microsoft.Extensions.Logging (MEL) 中的 ConsoleLoggerProvider 在 .NET 6 控制台应用程序中写入日志。 我希望我的日志包含每个
我正在使用 Microsoft.Extensions.Logging (MEL) 中的 ConsoleLoggerProvider 在 .NET 6 控制台应用程序中写入日志。 我希望我的日志包含每个
这更像是一个架构问题:您是使用 ILogger(并通过 DI 将其传递到构造函数中)还是更喜欢静态类 Log? 我们经常使用 ILogger,但它似乎确实使代码困惑,尤其是当它通过构造函数传递时。如果
我是第 3 方服务的 C# 开源包装器的作者。我需要公开一个 ILogger 工具(例如 https://logging.apache.org/log4net/release/sdk/log4net.
我正在使用 NLog (v2.0) 试用 Ninject 的日志记录扩展 (v3.0),根据我的阅读,我不应该配置任何东西,就像auto-神奇的,我需要做的就是在需要的地方声明一个ILogger 依赖
当我尝试使用 ILogger.LogInformation() 输出带有货币格式说明符的数值时,我得到了一个不同于我使用 Console.Log(string.Format( ))。后者显示预期的美元
我正在未来项目的原型(prototype)中使用 Durable Azure Function。 基本上,我有一个由启动 Orchestrator 的 HTTP POST 请求触发的客户端 Azure
我有一个函数应用程序(版本 2.0)并尝试记录异常的堆栈跟踪。 try { processedOrder = await orderProcessin
请参阅Log unhandled exceptions to custom logger在github上。显然 Up to Preview 2 Blazor 通过 Console.WriteLine
我有一个 ASP.NET Core 2 Web 应用程序正在部署到生产环境,需要启用日志来解决错误。我无法在文档中的任何地方找到 appsettings.json 的记录器部分中的架构。这是我在那里的
我正在实现一个自定义的 Microsoft.Extensions.Logging.ILogger (和 ILoggerProvider。我想检索当前的身份,但我真的不知道,因为我无法注入(inject
我有一个 azure 功能,它可以毫无问题地记录信息。 namespace aspnetcore_azurefun_blob { [StorageAccount("AzureWebJobsSt
我有一个服务,它执行一些 REST API 调用,并且我在 API 调用之前和之后进行自定义日志记录: _logger.LogTrace("Invoked API {ApiName}", new {
我是一名优秀的程序员,十分优秀!