c# - 在 azure 函数中注入自定义类记录器不会写入控制台
问题描述
我有 Azure 函数 V2(IotHub 触发器)。如果我将 ILogger 用于 Main 触发函数,则 log.Debug() 输出完美:
[FunctionName("MainFunc")]
public async Task Run([IoTHubTrigger("messages/events", Connection = "IotHubCompatibleEndpointConnectionString", ConsumerGroup = "iothub_trigger_sqldb_cg")]
EventData eventData,
ILogger log)
{
log.LogDebug("it outputs!"); // works perfectly
我想要做的是将记录器注入我的自定义服务:
public class Startup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder)
{
builder.Services.AddScoped<ITelemetryProcessor, TelemetryProcessor>();
builder.Services.AddScoped<INotificationSender, NotificationSender>();
builder.Services.AddLogging();
}
}
在服务构造函数中,我尝试以两种方式将日志写入输出控制台
public TelemetryProcessor(INotificationSender notificationSender, ILogger<ITelemetryProcessor> log, ILoggerFactory loggerFactory)
{
_notificationSender = notificationSender;
_log = loggerFactory.CreateLogger("common");
_log.LogDebug("write something"); // doesn't output
log.LogDebug("write something v2"); // doesn't output as well
....
}
解决方案
应在 host.json 中设置日志记录添加日志记录部分后,注入的日志(两者)开始工作
例如像这样:
{
"version": "2.0",
"logging": {
"fileLoggingMode": "debugOnly",
"logLevel": {
// For all functions
"Function": "Trace",
// Default settings, e.g. for host
"default": "Trace"
}
}
}
更多关于配置可以在这里找到
推荐阅读
- android - Android Studio - 找不到 com.firebase:firebase-jobdispatcher:0.8.5
- javascript - 使用microsoft graph api上传文件到onedrive时的授权
- azure - 天蓝色管道模板在 targetType:filePath 时找不到脚本
- apache - Apache 无法识别域 - Spring App
- json - 如何将此 JSON 数据导入 postgresql 表?
- html - 如何将此带有 alt 文本的 Markdown 转换为带有图像大小调整的 HTML?
- python - 添加起始日期列
- javascript - NodeJs客户端中的条件html提交选项
- r - 如何将多个data.frames的多个列强制为R中的字符?
- excel - vb.net 比较两列,一列来自datagridview,一列来自excel