覆盖 Azure Functions 的日志级别

Overriding Log Level for Azure Functions

有没有办法在不更新 host.json 文件的情况下覆盖 Azure Function 应用程序的默认日志级别?我希望我的函数仅在开发环境中将跟踪日志传递给应用程序洞察。我在想是否可以只设置一个环境变量并且该函数将知道何时传递日志。

我们无法使用环境变量配置日志级别。当功能主机启动时,它会从 host.json 读取日志级别,并注入具有相应过滤规则的 ILogger 实例。主机配置不是环境变量。

目前我想我们不能使用环境变量配置日志级别。而且我认为您不需要到达那里。我想你只是想为不同的功能指定不同的级别,日志级别支持指定功能。

host.json 中记录配置。

"logging": {
    "logLevel": {
     // For specific function
     "Function.MyFunction1": "Information",
     // For all functions
     "Function":"Error",
     // Default settings, e.g. for host 
     "default": "None"
    }
}

一种可能的解决方法是创建您自己的应用程序设置,以定义您想要 运行 的日志级别。然后,在您的代码中,在函数中加载 app 设置,并使用它来控制是否调用 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 并重新启动应用程序没有太大区别。

是的,这是可能的。要替换默认日志级别设置键 AzureFunctionsJobHost__logging__LogLevel__Default 和值 Trace/Debug/Information 或任何你想要的。就像我在 host.json Default 中是 Trace 但在天蓝色中它是 Information。因此,只需为所有日志级别的键添加新的环境变量(应用程序设置)和前缀 AzureFunctionsJobHost__logging__LogLevel__ 并设置所需的值,您的主机设置将被覆盖。 你可以阅读更多Here

从我的角度来看,通常您不能在不重新启动 Azure Function 的情况下更改记录器级别。

BUT,如果你正在编写.NET core函数应用程序,你可以尝试动态配置特性:Tutorial: Use dynamic configuration in an Azure Functions app.更新host.json或门户上的函数配置然后重启函数应用是静态配置。使用动态配置方式不需要重启函数应用