如何让本地部署的Azure Functions主机输出函数调用日志?
本地部署Azure Functions Host日志问题排查
问题背景
因组织无法使用Azure,在本地服务器安装Azure Functions Host后运行正常,但日志输出为简化版本,无法查看函数调用日志,期望日志输出与本地调试时一致。
已执行操作
- 安装Asp.Net Core 6.0 hosting bundle
- 将Azure Functions host解压至
C:\inetpub\Functions.X.X.X - 修改
C:\Windows\System32\inetsrv\config\applicationHost.config的'authentication'部分以允许覆盖 - 将函数应用发布至文件夹
- 添加'Logs'文件夹并为IIS_IUSRS用户赋予完全权限
- 使用以下
web.config配置:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <handlers> <remove name="aspNetCore" /> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="C:\inetpub\Functions.4.14.0\4.14.0\64bit\Microsoft.Azure.WebJobs.Script.WebHost.exe" stdoutLogEnabled="true" stdoutLogFile=".\Logs\stdout" hostingModel="InProcess"> <environmentVariables> <environmentVariable name="AzureWebJobsStorage" value="UseDevelopmentStorage=true" /> <environmentVariable name="FUNCTIONS_WORKER_RUNTIME" value="dotnet" /> </environmentVariables> </aspNetCore> </system.webServer> </configuration>
- 使用以下
host.json配置:
{ "version": "2.0", "tracing": { "consoleLevel": "verbose" }, "logging": { "fileLoggingMode": "always", "logLevel": { "default": "Information" } } }
期望日志输出
info: Microsoft.Hosting.Lifetime[14] Now listening on: https://localhost:7201 info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:5201 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development info: Microsoft.Hosting.Lifetime[0] Content root path: C:\Repositories\iPM Web API\src\WaikatoDhb.Ipm.Api\
解决方案
1. 补充环境变量配置
在web.config的<environmentVariables>节点中添加以下变量:
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" /> <environmentVariable name="FUNCTIONS_LOGGING_VERBOSE" value="true" />
ASPNETCORE_ENVIRONMENT=Development:让主机以开发模式运行,输出更详细的调试级日志FUNCTIONS_LOGGING_VERBOSE=true:强制开启函数运行时的全量日志输出
2. 优化host.json日志配置
更新host.json,补充函数运行时的日志规则和输出配置:
{ "version": "2.0", "tracing": { "consoleLevel": "verbose", "fileLevel": "verbose" }, "logging": { "fileLoggingMode": "always", "logLevel": { "default": "Information", "Microsoft.Azure.WebJobs": "Information", "Function": "Information" }, "console": { "isEnabled": true, "logLevel": { "default": "Information" } } } }
- 新增
Microsoft.Azure.WebJobs和Function的日志级别设置,确保函数触发、执行等核心操作日志被捕获 - 显式启用控制台日志输出,保证stdout能输出完整的日志内容
3. 确认日志路径与权限
- 检查
web.config中stdoutLogFile的路径,建议使用绝对路径(如C:\inetpub\YourFunctionApp\Logs\stdout)避免相对路径解析问题 - 再次确认IIS_IUSRS用户对
Logs文件夹拥有写入权限
4. 重启IIS站点与应用池
修改配置后,必须重启对应的IIS站点和应用池,确保新配置生效:
- 打开IIS管理器,找到目标站点右键选择重启
- 同步重启对应的应用池,清除配置缓存
完成以上操作后,触发函数调用即可在Logs目录下的stdout日志文件中看到与本地调试一致的详细日志,包括函数调用的完整记录。
内容的提问来源于stack exchange,提问作者Andrew Williamson
相关产品推荐
相关产品推荐

