Azure Web App自定义日志无法同步至Log Analytics?.NET Core配置排查
Azure Web App自定义Serilog日志采集到Log Analytics工作区解决方案
问题分析
你配置Serilog将自定义格式日志写入Azure Web App的../../LogFiles/Application/diagnostics-.txt路径,且开启了诊断设置,但AppServiceAppLogs表无数据,核心原因是Azure默认仅识别特定格式的应用日志,自定义格式无法自动解析到默认表,需通过调整格式或配置自定义日志采集解决。
步骤1:确认基础配置正确性
- 验证日志文件生成情况:通过Kudu站点(
https://<你的应用名>.scm.azurewebsites.net/)的Debug Console > PowerShell,导航到D:\home\LogFiles\Application,确认diagnostics-*.txt文件存在且有日志内容。 - 检查诊断设置:在Azure门户的Web App诊断设置中,确认已勾选应用日志文件,目标设置为你的Log Analytics工作区,同时日志路径填写为
D:\home\LogFiles\Application\diagnostics-*.txt(用通配符匹配按日滚动的日志文件)。
步骤2:适配默认日志表(快速方案)
若无需保留自定义字段(ApplicationName、Version等),可修改Serilog的outputTemplate为Azure默认识别的格式,日志将自动进入AppServiceAppLogs表:
"outputTemplate": "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz}] [{Level:u3}] {SourceContext}: {Message}{NewLine}{Exception}"
修改后重新部署应用,等待10-15分钟即可在Log Analytics中查询AppServiceAppLogs表。
步骤3:自定义日志采集(保留自定义字段)
若需保留所有自定义字段,需在Log Analytics工作区配置自定义日志采集:
- 进入Log Analytics工作区,左侧菜单选择自定义日志,点击添加自定义日志。
- 上传你的日志示例文件,选择按行分割日志,点击下一步。
- 定义字段提取规则:使用正则表达式匹配你的日志格式,示例正则:
系统会自动提取^\[(?<Timestamp>.*?)\] \[(?<ApplicationName>.*?)\] \[(?<Version>.*?)\] \[(?<Environment>.*?)\] \[(?<ClientAgent>.*?)\] \[(?<CorrelationId>.*?)\] \[(?<Level>.*?)\] \[(?<SourceContext>.*?)\] (?<Message>.*?)(?<Exception>.*)?$Timestamp、ApplicationName等字段,可按需调整正则表达式。 - 配置日志源路径:在收集路径中填写
D:\home\LogFiles\Application\diagnostics-*.txt,选择Windows作为操作系统,点击下一步。 - 为自定义日志表命名(如
CustomDiagnosticsLogs),完成配置。
步骤4:验证采集效果
等待10-15分钟后,在Log Analytics工作区运行Kusto查询验证:
CustomDiagnosticsLogs_CL | take 10 | project Timestamp, ApplicationName, Level, Message
额外排查点
- 权限检查:确认Web App的系统分配标识(或手动配置的标识)拥有Log Analytics工作区的参与者或日志写入者权限。
- Serilog写入验证:检查Serilog是否有写入异常,可查看Kudu中的
D:\home\LogFiles\Application目录下是否有Serilog相关错误日志。 - 滚动文件名确认:由于你设置了
rollingInterval": "Day",Serilog生成的文件名应为diagnostics-yyyyMMdd.txt,确保诊断设置中的路径通配符匹配正确。
内容的提问来源于stack exchange,提问作者RL33
相关产品推荐
相关产品推荐

