C# 注入azure函数中的自定义类记录器不会写入控制台
我有Azure功能V2(IotHub触发器)。如果我在主触发器函数中使用ILogger,则log.Debug()输出完美:C# 注入azure函数中的自定义类记录器不会写入控制台,c#,azure,azure-functions,C#,Azure,Azure Functions,我有Azure功能V2(IotHub触发器)。如果我在主触发器函数中使用ILogger,则log.Debug()输出完美: [FunctionName("MainFunc")] public async Task Run([IoTHubTrigger("messages/events", Connection = "IotHubCompatibleEndpointConnectionString", ConsumerGroup = "iothub_trigger_sqldb_cg")]
[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
我想做的是将logger注入到我的自定义服务中:
public class Startup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder)
{
builder.Services.AddScoped<ITelemetryProcessor, TelemetryProcessor>();
builder.Services.AddScoped<INotificationSender, NotificationSender>();
builder.Services.AddLogging();
}
}
公共类启动:IWebJobsStartup
{
公共void配置(IWebJobsBuilder生成器)
{
builder.Services.addScope();
builder.Services.addScope();
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
....
}
公共遥测处理器(INotificationSender notificationSender、ILogger日志、ILogger工厂日志)
{
_notificationSender=notificationSender;
_log=loggerFactory.CreateLogger(“公共”);
_log.LogDebug(“写东西”);//不输出
LogDebug(“write something v2”);//也不输出
....
}
应在host.json中设置日志记录
添加日志段后,注入的日志(两者)开始工作
例如:
{
"version": "2.0",
"logging": {
"fileLoggingMode": "debugOnly",
"logLevel": {
// For all functions
"Function": "Trace",
// Default settings, e.g. for host
"default": "Trace"
}
}
}
有关配置的更多信息,请参见您是否指定了
[assembly:WebJobsStartup(typeof(Startup))]
属性
下面是一个完整的工作示例
private IServiceCollection ConfigureServices(IServiceCollection services)
{
services
.AddLogging(loggingBuilder =>
loggingBuilder.AddSerilog(
new LoggerConfiguration()
.WriteTo.DatadogLogs(
apiKey: "REPLACE - DataDog API Key",
host: Environment.MachineName,
source: "REPLACE - Log-Source",
service: GetServiceName(),
configuration: new DatadogConfiguration(),
logLevel: LogEventLevel.Infomation
)
.CreateLogger())
);
return services;
}