为什么我的Azure Function不遵循环境变量日志设置却遵循host.json?
我通过opentelemetry添加了日志记录,现在我发现日志出现了重复的条目,因为它们同时通过函数的处理程序和opentelemetry的处理程序发送。
我想要关闭函数的日志记录,因为opentelemetry通过OperationID/ParentID提供了跟踪信息,这样opentelemetry的日志就能更好地关联和使用。因此,现在需要在单个函数中禁用函数的日志记录,因为其他函数还没有进行这种设置。
根据这份文档,我应该能够设置环境变量,比如:
AzureFunctionsJobHost__logging__logLevel__Function__MyFunction__User
来控制日志记录,同时覆盖其他设置。我发现像这样的主机级设置:
AzureFunctionsJobHost__logging__logLevel__Function=None
确实有效,基本上是禁用了所有日志记录,但在单个函数级别(带有__MyFunction__User
后缀)时,这个设置却被忽略了。
我还注意到通过host.json的设置也有效:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
},
"logLevel": {
"Function": "Information",
"Function.MyFunction.User": "None"
}
}
}
以上方法达到了目标,但我更喜欢通过环境变量进行配置。我是不是漏掉了什么?
1 个回答
0
我尝试使用下面的设置,但只有在我在host.json
中为单个函数将日志级别设置为无时,日志记录才被禁用。而在添加环境变量设置后,它仍然没有生效。
环境设置:-
"name": "AzureFunctionsJobHost__logging__logLevel__Function__http_trigger__User",
"value": "None",
"name": "AzureFunctionsJobHost__logging__logLevel__Function__http_trigger",
"value": "None",
host.json:-
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
},
"logLevel": {
"Function.http_trigger" : "Information",
"Function.timer_trigger" : "Information"
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
函数日志仍然可见:-
但是当我在host.json
中将loglevel
设置为无时,函数触发的日志就被禁用了:-
host.json:-
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
},
"logLevel": {
"Function.http_trigger" : "None",
"Function.timer_trigger" : "None"
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
输出:-
这看起来像是一个bug。我已经在Github上提交了一个问题,希望这个设置能正常工作,关注这个问题以获取后续更新。