Azure Function部署Linux App Service后找不到azure-functions-host下log4net.config报错
问题根因
Azure Linux App Service 上运行的Azure Function默认工作目录为/azure-functions-host,你项目里的log4net.config默认是部署到站点的/home/site/wwwroot目录下,如果你写的是相对路径加载配置,log4net会默认去当前工作目录找文件,就会触发找不到文件的报错。
解决步骤
- 首先配置log4net.config文件的部署属性:在Visual Studio中右键该文件,选择「属性」,将复制到输出目录选项设置为如果较新则复制,确保部署时文件会被同步到目标环境。
- 不要用相对路径加载配置,改为通过执行程序集路径拼接配置文件绝对路径加载,示例代码如下:
using System.Reflection; using System.IO; using log4net.Config; // 程序启动/初始化log4net的位置执行以下代码 var execAssembly = Assembly.GetExecutingAssembly(); var configFullPath = Path.Combine(Path.GetDirectoryName(execAssembly.Location), "log4net.config"); XmlConfigurator.Configure(new FileInfo(configFullPath));
- 也可以通过环境变量拼接路径:Linux Function的
HOME环境变量对应站点根目录,配置文件路径为Path.Combine(Environment.GetEnvironmentVariable("HOME"), "site/wwwroot/log4net.config")。 - 部署后可以进入Azure门户对应Function的「高级工具(Kudu)」,切换到Bash终端,进入
/home/site/wwwroot目录确认log4net.config文件存在,避免部署遗漏的问题。
内容的提问来源于stack exchange,提问作者lijevosmetalo
相关产品推荐
相关产品推荐

