c# - ILogger:记录方法:无法发送用户定义的变量
问题描述
我有一个使用 NLog 的现有项目。所以我已经在我现有的项目中编写了调试/警告方法。
现在扩展项目。在我想使用的新项目中Microsoft.Extensions.Logging.ILogger
。
我没有从头开始编写,而是尝试使用现有代码。就像是:
public void Log<TState>(Microsoft.Extensions.Logging.LogLevel logLevel, EventId eventId, LogInfo logInfo, Exception exception, Func<TState, Exception, string> formatter)
{
NLog.ILogger logger = null;
if (logLevel == Microsoft.Extensions.Logging.LogLevel.Debug)
{
logger.Debug(logInfo, logLevel );
}
}
该类LogInfo
是用户定义的类。我不能那样做,因为方法被定义为
public void Log<TState>(Microsoft.Extensions.Logging.LogLevel logLevel, EventId eventId, TState logInfo, Exception exception, Func<TState, Exception, string> formatter)
现在如何传递logInfo
给方法?任何好的文档Tstate
也将不胜感激。
解决方案
正如蛇足所说,
如果你喜欢在ILogger
NLog 中使用注入,你可以使用
- NLog.Web.AspNetCore包(如果是 ASP.NET Core,请参阅ASP.NET Core with NLog 教程),或
- 其他 .NET Core 应用程序的NLog.Extensions.Logging包,例如控制台应用程序。请参阅本教程。
正确设置后,您可以执行以下操作:
_logger.LogInformation("Log message with {simpleText} and {@complexObject}", myString, myObject);
${message}
并使用和/或${event-properties:simpleText}
/捕获那些${event-properties:complexObject}
。请参阅如何使用结构化日志记录。
推荐阅读
- azure-api-management - APIM 处于消费模式 - 通过 /status-0123456789abcdef 获取 Azure APIM 运行状况检查返回“找不到资源”
- deep-learning - 在与图像翻译非常相似的任务中,如何处理 UNet 编码器/解码器 CNN 中的严重过拟合?
- asynchronous - 如何编写一个需要消费者将切片的内容memcpy到自己的分配中的流?
- amazon-web-services - AWS ALB - 如果重新创建底层 ALB,是否需要新证书?
- c# - 如何从 c# 控制台应用程序中的用户输入创建多个对象?
- node.js - 如何在 browserstack 中找到当前可用于测试的移动设备
- c# - 如何在字节数组C#中转换具有随机长度的字符串
- python - UnboundLocalError:分配前引用的局部变量“ehp”
- c# - “缺少 using 指令或程序集引用?” 尝试发布时出错
- html - 如何在页面加载之前使用 NODE 更改一些 HTML?