Log4Net DB 日志记录在开发而不是实时服务器上工作

Log4Net DB logging working on Development but not Live server

我们在我们的一个服务应用程序上使用 Log4Net 登录来登录文件和数据库。在我们的开发服务器上,两种日志记录类型都可以正常工作。然而,在我们的暂存和实时服务器上,数据库日志记录不起作用。但是,文件日志记录工作正常。

我已经确认 SQL 权限是正确的,日志 tables/triggers/constraints 在两个系统上都是一样的。

我应该提一下,我们正在使用配置转换,以便根据我们的环境更改将记录到的数据库。不过,我可以确认正确的数据库被注入到配置中。

由于其他限制,我目前无法启用 log4Net 调试日志记录。还有什么应该检查的吗?其他配置?或者我必须想出一种方法来启用 log4Net 调试。

可以在下面找到配置(Sql 配置已编辑):

<connectionStrings>
    <clear />
    <add name="log4netdb" providerName="System.Data.SqlClient"
    connectionString="Data Source=[dbname];Initial Catalog=[tableName];
    User Id=[username];Password=[password];" />
</connectionStrings>

Log4Net 配置:

<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="Scheduler_Log.txt" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="0" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  </layout>
</appender>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
  <bufferSize value="1" />
  <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  <connectionString value="log4netdb" />
  <commandText value="INSERT INTO LOG ([Date],[Application],[UserName],[Thread],[Level],[Logger],[Message],[Exception],[class],[method],[line]) VALUES (@log_date, @application, @user, @thread, @log_level, @logger, @message, @exception, @class, @method, @line)" />
  <parameter>
    <parameterName value="@log_date" />
    <dbType value="DateTime" />
    <layout type="log4net.Layout.RawTimeStampLayout" />
  </parameter>
  <parameter>
    <parameterName value="@thread" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%thread" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@log_level" />
    <dbType value="String" />
    <size value="50" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%level" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@logger" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%logger" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@message" />
    <dbType value="String" />
    <size value="4000" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%message" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@exception" />
    <dbType value="String" />
    <size value="2000" />
    <layout type="log4net.Layout.ExceptionLayout" />
  </parameter>
  <parameter>
    <parameterName value="@application" />
    <dbType value="string" />
    <size value="255" />
    <layout type="log4net.Layout.RawPropertyLayout">
      <key value="log4japp" />
      <conversionPattern value="%property{log4japp}" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@user" />
    <dbType value="string" />
    <size value="100" />
    <layout type="log4net.Layout.RawPropertyLayout">
      <key value="log4net:UserName" />
      <conversionPattern value="%property{log4net:UserName}" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@class" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%class" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@method" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%method" />
    </layout>
  </parameter>
  <parameter>
    <parameterName value="@line" />
    <dbType value="String" />
    <size value="4" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%line" />
    </layout>
  </parameter>
</appender>
<root>
  <level value="INFO" />
  <appender-ref ref="RollingFileAppender" />
  <appender-ref ref="AdoNetAppender" />
</root>

我最终找到了一个解决方案,该解决方案使用转换直接替换 log4Net 配置部分中的连接字符串,而不是连接字符串。

<log4net>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender" xdt:Locator="Match(name)">
  <connectionString value="Data Source=[server];Initial Catalog=[table];User Id=[user];Password=[password];" xdt:Transform="Replace"/>
</appender>