Log4net настраивает программно adoAppender - PullRequest
6 голосов
/ 23 мая 2011

Мне нужно добавить ado appender в существующую конфигурацию log4net.

Мне нужно добавить его через код. Однако я застрял при добавлении общих строковых параметров, таких как message, так как не могу правильно определить свойство layout: в конфигурации xml мы используем PatternLayout, но через код PatternLayout не является IRowLayout, поэтому у меня есть ошибка со следующим кодом:

    public static void AddStringParameterToAppender(this log4net.Appender.AdoNetAppender appender, string paramName, int size, string conversionPattern)
    {
        log4net.Appender.AdoNetAppenderParameter param = new log4net.Appender.AdoNetAppenderParameter();
        param.ParameterName = paramName;
        param.DbType = System.Data.DbType.String;
        param.Size = size;
        param.Layout = new log4net.Layout.PatternLayout(conversionPattern);
        appender.AddParameter(param);
    }

Кто-нибудь знает, как добавить строковый параметр в код, который похож на следующий пример XML:

<parameter>
    <parameterName value="@message" />
    <dbType value="String" />
    <size value="4000" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%message" />
    </layout>
</parameter>

1 Ответ

17 голосов
/ 24 мая 2011

Я наконец нашел, как преобразовать PatternLayout в IRawLayout.

. Для этого вам нужно использовать log4net.Layout.Layout2RawLayoutAdapter:

public static void AddStringParameterToAppender(this log4net.Appender.AdoNetAppender appender, string paramName, int size, string conversionPattern)
    {
        log4net.Appender.AdoNetAppenderParameter param = new log4net.Appender.AdoNetAppenderParameter();
        param.ParameterName = paramName;
        param.DbType = System.Data.DbType.String;
        param.Size = size;
        param.Layout = new log4net.Layout.Layout2RawLayoutAdapter(new log4net.Layout.PatternLayout(conversionPattern));
        appender.AddParameter(param);
    }
...