[
https://issues.apache.org/jira/browse/LOG4NET-186?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12682357#action_12682357
]
Ron Grabowski commented on LOG4NET-186:
---------------------------------------
I believe you're highlighting the verboseness of reusing a converter across
multiple parameters:
<parameter>
<parameterName value="@password" />
<dbType value="String" />
<layout type="log4net.Layout.PatternLayout">
<converter>
<name value="encrypt" />
<type value="Company.Logging.EncryptConverter, Company.Logging" />
</converter>
<conversionPattern value="%encrypt{Password}" />
</layout>
</parameter>
<parameter>
<parameterName value="@creditCardNumber" />
<dbType value="String" />
<layout type="log4net.Layout.PatternLayout">
<converter>
<name value="encrypt" />
<type value="Company.Logging.EncryptConverter, Company.Logging" />
</converter>
<conversionPattern value="%encrypt{CreditCardNumber}" />
</layout>
</parameter>
Exposing s_globalRulesRegistry might help from a code perspective but it isn't
going to help with the more typical XML configuration. Your idea of specifying
the converter once and reusing it across all parameters makes sense. While
we're at it, lets take out some of the verboseness of having to specify the
PatternLayout:
<converter>
<name value="encrypt" />
<type value="Company.Logging.EncryptConverter, Company.Logging" />
</converter>
<patternLayoutParameter>
<parameterName value="@password"/>
<dbType value="String" />
<conversionPattern value="%encrypt{Password}" />
</patternLayoutParameter>
<patternLayoutParameter>
<parameterName value="@creditCardNumber"/>
<dbType value="String" />
<conversionPattern value="%encrypt{CreditCardNumber}" />
</patternLayoutParameter>
To support that syntax I've extending AdoNetAppender to capture the converter
items:
public class PatternLayoutAdoNetAppender : AdoNetAppender
{
private readonly List<ConverterInfo> converters = new
List<ConverterInfo>();
public void AddConverter(ConverterInfo converterInfo)
{
converters.Add(converterInfo);
}
}
I also extended AdoNetAppenderParameter with a class that accepts a
conversionPattern:
public class PatternLayoutAdoNetAppenderParameter :
AdoNetAppenderParameter
{
private string conversionPattern;
public string ConversionPattern
{
get { return conversionPattern; }
set { conversionPattern = value; }
}
}
This last snippet of code wires up the <patternLayoutParameter /> nodes. It
takes the conversionPattern value and converts it into a format that the
AdoNetAppender understands:
public void
AddPatternLayoutParameter(PatternLayoutAdoNetAppenderParameter parameter)
{
PatternLayout patternLayout = new
PatternLayout(parameter.ConversionPattern);
addConveters(patternLayout);
patternLayout.ActivateOptions();
parameter.Layout = new Layout2RawLayoutAdapter(patternLayout);
m_parameters.Add(parameter);
}
private void addConveters(PatternLayout patternLayout)
{
foreach (ConverterInfo conveterInfo in converters)
{
patternLayout.AddConverter(conveterInfo);
}
}
You can also mix and match <patternLayoutParameter /> and <parameter /> nodes.
I'll add the complete class with some test cases to the example appender area
in /trunk.
> PatternLayout and globalRulesRegistry
> -------------------------------------
>
> Key: LOG4NET-186
> URL: https://issues.apache.org/jira/browse/LOG4NET-186
> Project: Log4net
> Issue Type: Improvement
> Components: Core
> Affects Versions: 1.2.10
> Reporter: Sergey
> Original Estimate: 0.17h
> Remaining Estimate: 0.17h
>
> Hi, i have suggestion.
> Make for private static field PatternLayout.s_globalRulesRegistry public
> static accessor. Because if i want append custom PatternLayoutConverter, i
> need add him to each PatternLayout for each Appender.
> I am using AdoNetAppender, which creates PatternLayout for each parameter.
> And i must append my PatternLayoutConverter to each param. I think, if i have
> static property or method for adding PatternLayoutConvertor - its will be
> more simple for use.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.