Log4Net web.config 转换不起作用

Log4Net web.config transform wont work

当我发布到我的 Azure 应用程序时,我试图让 web.config 转换为 Log4Net 工作,但它永远不会改变。我在转换中还有其他几个项目,它们工作得很好。这是我的

<log4net>
    <appender name="AdoNetAppender"  type="log4net.Appender.AdoNetAppender"  xdt:Locator="Match(name)">
      <connectionString value="Server=production server connection details here" xdt:Transform="Replace"/>
    </appender>
  </log4net>

谁能告诉我哪里出错了?

这是我的配置转换文件(删除了实时细节)

<?xml version="1.0" encoding="utf-8"?>

<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <log4net>
    <appender name="AdoNetAppender"  type="log4net.Appender.AdoNetAppender"  xdt:Locator="Match(name)">
      <connectionString value="Server=server details here" xdt:Transform="SetAttributes"/>
    </appender>
  </log4net>

  <connectionStrings>
    <add name="AzureWebJobsDashboard" connectionString="DefaultEndpointsProtocol=https;AccountName=liveversionhere;AccountKey=liveversionhere;EndpointSuffix=core.windows.net" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    <add name="AzureWebJobsStorage"  connectionString="DefaultEndpointsProtocol=https;AccountName=liveversionhere;AccountKey=liveversionhere;EndpointSuffix=core.windows.net"  xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    <add name="DefaultConnection" connectionString="Data Source=liveversionhere" providerName="System.Data.SqlClient"  xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    <add name="CHPDataContext" connectionString="Data Source=liveversionhere" providerName="System.Data.SqlClient"  xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    <add name="elmah" connectionString="Data Source=liveversionhere" providerName="System.Data.SqlClient"  xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>

  <appSettings>
    <add key="ida:redirectUri" value="liveversionhere" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
    <add key="ida:ClientId" value=liveversionhere  xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
    <add key="ida:ClientSecret" value=liveversionhere"  xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
    <add key="ida:TenantId" value=liveversionhere  xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
    
  </appSettings>
  
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
   
  </system.web>
</configuration>

**更新

我已经更改了转换(见下文),但它仍然不起作用。有人知道这里发生了什么吗?这应该是非常简单的,但我发现自己浪费了数小时的时间只是为了让这个基本的东西真正起作用

<log4net>
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender" xdt:Locator="Match(name)">
      <connectionString name="Log4NetConn" value="Server=productionsdetailshere" xdt:Locator="Match(name)" xdt:Transform="Replace"/>
    </appender>
  </log4net>

根据你的描述,我这边做了一些测试。假设您通过 VS 部署 Web 应用程序,我通过 "Build > Configuration Manager" 创建一个名为 Release.Azure 的新配置,如下所示:

然后我添加了一个名为Web.Release.Azure.config的web配置文件,配置内容如下:

<log4net>
  <appender name="AdoNetAppender"  type="log4net.Appender.AdoNetAppender"  xdt:Locator="Match(name)">
    <connectionString value="Server=azure production server connection details here" xdt:Transform="SetAttributes"/>
  </appender>
</log4net>

注:ReplaceSetAttributes都为connectionString下的属性xdt:Transform部分可以按预期工作。

使用 VS 的发布向导,在“设置”下选择我的 azure 配置,并将其部署到 azure web 应用程序。

此外,我还尝试通过 Kudu Console, restart my azure website, then I found the transform could work. You could refer to here 在我的网络应用程序的 d:\home\site 下创建一个 applicationHost.xdt 文件以获取更多详细信息。

更新:

applicationhost.xdt 如下所示:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <location path="%XDT_SITENAME%" xdt:Transform="InsertIfMissing" xdt:Locator="Match(path)">
    <log4net>
      <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"  xdt:Locator="Match(name)">
        <connectionString value="Server=production server connection details here" xdt:Transform="SetAttributes"/>
      </appender>
    </log4net>
  </location>
</configuration>

不得不替换整个 log4net 部分

连接字符串根本不起作用