带有windows容器http日志的Azure应用程序服务缺少cs用户名



我有一个asp.net 5 web应用程序。NET Framework 4.8作为azure应用程序服务运行,带有windows服务器2019容器映像。我设置了一个诊断设置,将"AppServiceHTTPLogs"发送到事件中心,在检查日志时,我注意到经过身份验证的请求缺少CsUsername属性。

在本地运行相同的容器映像,甚至作为Azure容器实例运行,并检查容器上的IIS日志,我可以看到用户名,因此这与作为应用程序服务运行时如何以及在何处捕获https日志有关,在该应用程序服务中,日志不会获取经过身份验证的主体的身份名称。

有其他人碰到过这个吗?我是否需要将主体公开为日志记录的响应标头来获取它?

更新:2022年2月24日

除了在这里询问之外,我还开始了一个azure支持的案例,询问为什么在运行windows容器的windows应用程序服务计划中,来自azure应用程序服务的web服务器日志缺少cs用户名信息,而在C:\inetpub\logs\LogFiles\W3SVC1中整合应用程序服务运行容器并检查w3c日志会显示cs用户名值。

他们终于回来说:

目前,恐怕您设置的体系结构不支持此功能,获取CsUsername详细信息的唯一方法是部署Linux应用程序服务,然后将Azure存储帐户作为数据端点。

这对我没有任何帮助,因为我无法运行。NET Framework 4.8 ASP。NET MVC 5应用程序容器。一般来说,通过部署windows容器作为azure应用程序服务运行,并通过azure DevOps管道将容器作为azze应用程序服务来运行,我发现微软对运行基于windows的容器的支持非常具有挑战性,而且没有太多持续的支持。他们试图推动linux托管环境,不幸的是,只有当您的体系结构基于时,这才是一个选项。NET核心框架。

有其他人遇到过这种情况吗?我需要将校长暴露为日志记录的响应标头以获取它?

这个问题可以通过以下两种不同的方式解决:的解决步骤

A]直接更改applicationHost.config

使用以下步骤编辑高级日志记录功能的applicationHost.config文件:

  • 在文本编辑器中打开C:\Windows\System32\inetsrv\config\applicationHost.config文件
  • 找到advancedLogging部分
  • advancedLogging中,找到<field id='UserName'...>条目

<field id="UserName" sourceName="UserName" sourceType="
RequestHeader " logHeaderName="cs-username" category="Default" loggingDataType="TypeLPCSTR" />

  • 将sourceType字段修改为BuiltIn,如下所示:

<field id="UserName" sourceName="UserName" sourceType="
BuiltIn " logHeaderName="cs-username" category="Default" loggingDataType="TypeLPCSTR" />

B]通过Appcmd.exe更改applicationHost.config

您可以使用appcmd.exe工具进行配置更改。

运行以下命令:

appcmd.exe set config -section:system.webServer/advancedLogging/server
/fields.[id='UserName'].sourceType:"BuiltIn" /commit:apphost

有关完整信息,您可以通过以下提到的链接

高级日志记录中没有cs用户名数据-Internet信息服务|Microsoft Docs

cs IIS日志中未填充用户名·问题#6741·dotnet/aspnetcore·GitHub

最新更新