使用存储过程时的 log4net 问题
log4net issue while using stored procedure
我正在尝试使用存储过程进行日志记录。我创建了一个存储过程,它将在 table
中插入一行
CREATE PROCEDURE [dbo].[usp_insert_log]
(
@log_date datetime,
@log_level varchar(10),
@log_message nvarchar(max)
)
AS
BEGIN
INSERT INTO [dbo].[Log] ([log_date], [log_level], [log_message])
VALUES (@log_date, @log_level, @log_message)
END
在我的配置文件中
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionStringName value="AnalyticsLogging" />
<commandText value="usp_insert_log" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout">
<conversionPattern value="%date" />
</layout>
</parameter>
</appender>
我收到以下错误
log4net:ERROR [AdoNetAppender] ErrorCode: GenericFailure. Exception while writing to database
System.Data.SqlClient.SqlException (0x80131904): Procedure or function 'usp_insert_log' expects parameter '@log_date', which was not supplied.
有什么我遗漏的吗?
尝试删除 ConversionPattern 并只使用
<layout type="log4net.Layout.RawTimeStampLayout"/>
不需要日期转换 - 请参阅 Log4net Conversion patterns
它将日期时间转换为字符串 - Iso8601DateFormatter Class
这开始是对 Peter 的回答的评论(我同意这是正确的答案),但评论不断增加,所以我决定在这里添加一个补充答案。
文档当然很难找到解决这个问题的方法,但此外,原始布局对象实现 IRawLayout
被引用 here 以使用原始的、未格式化的对象而不是格式化的对象,这在这种情况下 LoggingEvent
.
上的原始 DateTime
如果您想提供格式化的 DateTime
,您可以使用:
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{HH:mm:ss,fff}" />
</layout>
将格式替换为您想要使用的格式。
我正在尝试使用存储过程进行日志记录。我创建了一个存储过程,它将在 table
中插入一行CREATE PROCEDURE [dbo].[usp_insert_log]
(
@log_date datetime,
@log_level varchar(10),
@log_message nvarchar(max)
)
AS
BEGIN
INSERT INTO [dbo].[Log] ([log_date], [log_level], [log_message])
VALUES (@log_date, @log_level, @log_message)
END
在我的配置文件中
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionStringName value="AnalyticsLogging" />
<commandText value="usp_insert_log" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout">
<conversionPattern value="%date" />
</layout>
</parameter>
</appender>
我收到以下错误
log4net:ERROR [AdoNetAppender] ErrorCode: GenericFailure. Exception while writing to database
System.Data.SqlClient.SqlException (0x80131904): Procedure or function 'usp_insert_log' expects parameter '@log_date', which was not supplied.
有什么我遗漏的吗?
尝试删除 ConversionPattern 并只使用
<layout type="log4net.Layout.RawTimeStampLayout"/>
不需要日期转换 - 请参阅 Log4net Conversion patterns
它将日期时间转换为字符串 - Iso8601DateFormatter Class
这开始是对 Peter 的回答的评论(我同意这是正确的答案),但评论不断增加,所以我决定在这里添加一个补充答案。
文档当然很难找到解决这个问题的方法,但此外,原始布局对象实现 IRawLayout
被引用 here 以使用原始的、未格式化的对象而不是格式化的对象,这在这种情况下 LoggingEvent
.
DateTime
如果您想提供格式化的 DateTime
,您可以使用:
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{HH:mm:ss,fff}" />
</layout>
将格式替换为您想要使用的格式。