加密log4net AdoNetAppender使用的connectionString

4

我想加密log4net的AdoNetAppender连接字符串,但不想加密整个appender。

这可行吗?

Dion Olsthoorn 在博客中提到了在代码中设置连接字符串,但我希望在专门用于日志记录的配置文件中进行设置,因为它将使用与应用程序其余部分不同的数据库。

下面是http://logging.apache.org/log4net/release/sdk/log4net.Appender.AdoNetAppender.html上的示例配置:

<appender name="AdoNetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">
  <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  <connectionString value="data source=SQLSVR;initial catalog=test_log4net;integrated security=false;persist security info=True;User ID=sa;Password=sa" />
  <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" />
  <parameter>
    <parameterName value="@log_date" />
    <dbType value="DateTime" />
    <layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
  </parameter>
  <parameter>
    <parameterName value="@thread" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout" value="%thread" />
  </parameter>
  <parameter>
    <parameterName value="@log_level" />
    <dbType value="String" />
    <size value="50" />
    <layout type="log4net.Layout.PatternLayout" value="%level" />
  </parameter>
  <parameter>
    <parameterName value="@logger" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout" value="%logger" />
  </parameter>
  <parameter>
    <parameterName value="@message" />
    <dbType value="String" />
    <size value="4000" />
    <layout type="log4net.Layout.PatternLayout" value="%message" />
  </parameter>
</appender>
2个回答

2

我可以通过继承log4net AdoNetAppender并添加一个名为ConnectionStringName的属性来解决这个问题。

如果设置了该属性,它将从web.config连接字符串中读取连接字符串,并将其传递给底层的AdoNetAppender。

我仍然希望有一个解决方案,可以将所有日志配置保存在单个文件中,并允许加密连接字符串。

    public class ConfigAdoNetAppender : AdoNetAppender
    {
        public string ConnectionStringName
        {

            set
            {
                this.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings[value].ToString();
            }
        }
    }

2

当前的源代码已经有ConnectionStringName属性,正是您要寻找的。

ConnectionStringName属性是在修订版607748中引入的。版本1.2.10是修订版395324,与此相比已经相当老了。

如果您对使用未发布的代码感到舒适,可以获取最新的源代码并自行编译。您也可能只需获取更新的AdoNetAppender类,但这可能会依赖于其他log4net核心的更新。


我刚刚在1.2.10的源代码中搜索了一遍,但无法找到ConnectionStringName。我应该去哪里找?谢谢。 - Daniel Ballinger
@Daniel - 已更新答案并附上了一些参考资料。 - Peter Lillevold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接