覆盖Azure功能的日志级别

时间:2020-03-12 16:54:28

标签: azure-functions azure-application-insights

是否可以在不更新host.json文件的情况下覆盖Azure Function应用的默认日志级别?我希望我的功能仅在开发环境上将跟踪日志传递给应用程序见解。我在考虑是否可以仅设置环境变量,并且该函数将知道何时传递日志。

4 个答案:

答案 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 DefaultTrace,但天生就是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和重新启动应用程序没什么不同。