是否可以在不更新host.json文件的情况下覆盖Azure Function应用的默认日志级别?我希望我的功能仅在开发环境上将跟踪日志传递给应用程序见解。我在考虑是否可以仅设置环境变量,并且该函数将知道何时传递日志。
答案 0 :(得分:1)
我们无法使用环境变量配置日志级别。当函数host启动时,它将从host.json读取日志级别,并使用相应的过滤规则注入ILogger实例。主机配置不是env变量。
答案 1 :(得分:1)
现在,我想我们无法使用环境变量配置日志级别。而且我认为您不需要到达那里。我认为您只想为不同的功能指定不同的级别,而日志级别支持指定该功能。
host.json中的日志配置。
"logging": {
"logLevel": {
// For specific function
"Function.MyFunction1": "Information",
// For all functions
"Function":"Error",
// Default settings, e.g. for host
"default": "None"
}
}
答案 2 :(得分:1)
是的,这是可能的。要替换默认日志级别,请设置键AzureFunctionsJobHost__logging__LogLevel__Default
和值Trace
/ Debug
/ Information
或任何您想要的值。就像在我的host.json中一样,json Default
是Trace
,但天生就是Information
。因此,只需为日志级别的所有键添加新的环境变量(应用程序设置)并以AzureFunctionsJobHost__logging__LogLevel__
为前缀,然后设置所需的值,主机设置将被覆盖。
您可以阅读更多Here
答案 3 :(得分:0)
可能的解决方法是创建自己的应用程序设置,以定义要在哪个日志级别运行。然后,在代码中,将应用程序设置加载到函数中,并使用它来控制是否调用logger方法。例如:
bool shouldDebug = // obtain the app setting, or environment variable here
bool shouldInformation = // same for here
bool shouldTrace = // same for here
if (shouldDebug) { logger.LogDebug("Log debug!"); }
if (shouldInformation) { logger.LogInformation("Log information!"); }
if (shouldTrace) { logger.LogTrace("Log trace!"); }
您的代码将变得更加肿,但它将使您能够灵活地更轻松地更改日志记录级别。但是应注意,更改应用程序设置将导致您的应用程序始终以重启方式运行,因此与更改host.json和重新启动应用程序没什么不同。