gpt4 book ai didi

.net - 使用 log4net 的 adonetappender 登录到 redshift

转载 作者:行者123 更新时间:2023-12-02 01:37:31 24 4
gpt4 key购买 nike

我正在尝试使用 log4net 的内置 adonetappender 登录到我的 redshift 服务器。删除时间戳字段后,日志将成功保存。但是,时间戳的格式似乎导致它失败。我已经尝试过许多与 redshift 声称支持的格式相匹配的不同格式。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- This section contains the log4net configuration settings -->
<log4net>

<!-- Define some output appenders -->

<appender name="DebugAppender" type="log4net.Appender.DebugAppender">
<immediateFlush value="true" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>

<appender name="RedshiftAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value="System.Data.Odbc.OdbcConnection,System.Data,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral" />
<connectionString value="Driver={Amazon Redshift (x86)};..." />
<commandText value="INSERT INTO hep_config.server_log (tm,src,lvl,msg) VALUES ($1,$2,$3,$4)" />
<parameter>
<parameterName value="$1" />
<dbType value="DateTime" />
<layout type="log4net.Layout.PatternLayout" value="%date{yyyyMMdd HH':'mm':'ss'.'fff}" />
</parameter>
<parameter>
<parameterName value="$2" />
<dbType value="String" />
<size value="128" />
<layout type="log4net.Layout.PatternLayout" value="%thread" />
</parameter>
<parameter>
<parameterName value="$3" />
<dbType value="String" />
<size value="64" />
<layout type="log4net.Layout.PatternLayout" value="%level" />
</parameter>
<parameter>
<parameterName value="$4" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout" value="%message" />
</parameter>
</appender>

<root>
<level value="ALL" />
<appender-ref ref="DebugAppender" />
<appender-ref ref="RedshiftAppender" />
</root>

</log4net>

</configuration>

最佳答案

我试过但无法让它与 Redshift 驱动程序一起工作。然而,PostgreSQL ODBC Driver确实有效。尝试以下操作:

更改连接字符串以使用 PostgreSQL ODBC Driver .请注意,我使用的是 64 位 Windows,因此您需要根据您的版本调整驱动程序。

<connectionString value="Driver={PostgreSQL Unicode(x64)};..." />

更改 DateTime 的布局以使用 RawUtcTimeStampLayout。

<layout type="log4net.Layout.RawUtcTimeStampLayout" />

注意: Timestamp Redshift 中的值为 UTC

更新

我能够让它与 Redshift 驱动程序一起工作。 OdbcCommand.Parameters 的 MSDN 文档状态:

When CommandType is set to Text, the .NET Framework Data Provider for ODBC does not support passing named parameters to an SQL statement or to a stored procedure called by an OdbcCommand. In either of these cases, use the question mark (?) placeholder.

The order in which OdbcParameter objects are added to the OdbcParameterCollection must directly correspond to the position of the question mark placeholder for the parameter in the command text.

使用此信息,您可以尝试以下操作:

<commandText value="INSERT INTO log.log_test(tm,src,lvl,msg) VALUES (?, ?, ?, ?)" />

此时,您为参数命名并不重要,因为参数的顺序很重要。我确实继续使用 RawUtcTimeStampLayout,但我将 dbType 更改为字符串。

关于.net - 使用 log4net 的 adonetappender 登录到 redshift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30359748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com