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>
我们在我们的一个服务应用程序上使用 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>