我们在LoggerMessageAttribute
中使用compile-time logging source generation,例如:
public static partial class LoggerExtensions
{
[LoggerMessage(
EventId = 1953,
EventName = "ExecutingQuery",
Level = LogLevel.Information,
Message = "Executing query {MyQuery}")]
public static partial void ExecutingQuery(this ILogger logger, string myQuery);
}
所以我们可以这样记录:
internal class MyBeautifulQueryHandler
{
private readonly ILogger<MyBeautifulQueryHandler> _logger;
public MyBeautifulQueryHandler(ILogger<MyBeautifulQueryHandler> logger) => _logger = logger;
public async Task ExecuteAsync(MyBeautifulQuery query)
{
_logger.ExecutingQuery(nameof(MyBeautifulQuery));
// do something asynchronously
}
}
这种使用nameof
运算符的模式在我们的代码库中反复出现.
我想知道编译时日志(log)源代码生成是否支持以下内容:
_logger.ExecutingQuery<MyBeautifulQuery>();
甚至更好
_logger.ExecutingQuery();
两者都会产生相同的日志(log)消息Executing query MyBeautifulQuery
.所以我在寻找类似CallerMemberNameAttribute
的东西.
可能吗?
谢谢