You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-user@logging.apache.org by Ron Grabowski <ro...@yahoo.com> on 2006/12/17 22:55:16 UTC

Re: Detached definition of layout

In the configuration file below the shared patter layout is stored as a property in the repository. The repositoryPropertyConversionPattern node uses its value as a key into the repository's properties:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
    <property>
        <key value="dateDateDate" />
        <value value="%date %date %date" />
    </property>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="ConsoleApplication1.RepositoryPropertyPatternLayout, ConsoleApplication1">
            <repositoryPropertyConversionPattern value="dateDateDate" />
        </layout>
    </appender>
    <root>
        <level value="ALL" />
        <appender-ref ref="ConsoleAppender" />
    </root>    
</log4net>

public class RepositoryPropertyPatternLayout : PatternLayout
{
 private string repositoryPropertyConversionPattern;

 protected override PatternParser CreatePatternParser(string pattern)
 {
  if (repositoryPropertyConversionPattern != null)
  {
   ConversionPattern = 
    (string)LogManager.GetRepository().Properties[repositoryPropertyConversionPattern];
    return base.CreatePatternParser(ConversionPattern);
  }
  else
  {
   return base.CreatePatternParser(pattern);
  }
 }

 public string RepositoryPropertyConversionPattern
 {
  get { return repositoryPropertyConversionPattern; }
  set { repositoryPropertyConversionPattern = value; }
 }
}

PatternLayout is initialized with its default pattern so CreatePatternParser is always called twice: once for the default pattern and once for the pattern we specify. We're intercept the second call once repositoryPropertyConversionPattern has a value.

----- Original Message ----
From: Karel Kral <kr...@volny.cz>
To: Log4NET User <lo...@logging.apache.org>
Sent: Wednesday, November 15, 2006 9:11:54 AM
Subject: Re: Detached definition of layout

<property key="defaultPattern" value="%date [%thread] %-5level " />
> <appender name="FileAppender" type="log4net.Appender.FileAppender">
>  <file value="log.txt" />
>  <layout type="Company.RepositoryPropertyPatternLayout, Company"
value="defaultPattern" />

I'm sorry, You example would satisfy what I need. So I must to write
CustomisedLayoutPattern, it would to be realisable. My question is how
to access property "defaultPattern" from my CustomisedLayoutPattern code?
___________________________________________________
Karel Kral, vyvojar
ANETE, s.r.o.
Prostredi: VB.NET, VS2005, XP Pro/P4 3GHz, 2GB RAM
___________________________________________________

On 15.11.2006 15:04, Karel Kral wrote:
> No, extending class is not complicated, I have already done some
> Appenders etc. I can create the descendant of the PatternLayout with
> hard-wired pattern without problem.
> 
> But what I can't imagine is how to create PatternLayout descendant in
> the manner of my original question. Layout, which is "detached", which
> is configurable from XML and is referable in the same way as appenders.
> Example "MySharedLayout" bellow. Is this realizable by me?
> 
> <layout type="Company.Logging.CustomisedLayoutPattern, Company.Logging"
> name="MySharedLayout">
>   <conversionPattern value="%date [%thread] %-5level %-35.35logger
> [%-10.10property{NDC}] - %message%newline" />
> </layout>
> 
> <appender name="Global.FileAppender"
> type="log4net.Appender.RollingFileAppender">
> <layout-ref ref="MySharedLayout">
> </appender>
> 
> ___________________________________________________
> Karel Kral, vyvojar
> ANETE, s.r.o.
> Prostredi: VB.NET, VS2005, XP Pro/P4 3GHz, 2GB RAM
> ___________________________________________________
> 
> On 15.11.2006 13:35, Ron Grabowski wrote:
>> Do you think extending a class and override one method is complicated? 
>>
>> How do you think log4net should support this feature?
>>
>> ----- Original Message ----
>> From: Karel Kral <kr...@volny.cz>
>> To: Log4NET User <lo...@logging.apache.org>
>> Sent: Wednesday, November 15, 2006 2:55:31 AM
>> Subject: Re: Detached definition of layout
>>
>> Thanks! It is no simple solution but thanks for it.
>> ___________________________________________________
>> Karel Kral, vyvojar
>> ANETE, s.r.o.
>> Prostredi: VB.NET, VS2005, XP Pro/P4 3GHz, 2GB RAM
>> ___________________________________________________
>>
>> On 15.11.2006 2:09, Ron Grabowski wrote:
>>> If you're pattern doesn't change often or you have a standard company wide pattern you could extend the PatternLayout class and tell the appender to use that:
>>>
>>> <appender name="FileAppender" type="log4net.Appender.FileAppender">
>>>  <file value="log.txt" /> 
>>>  <layout type="Company.Logging.StandardLayoutPattern, Company.Logging" />
>>> </appender>
>>>
>>> You can apply a similiar idea to the FileAppender (or any other object) and have it set default values:
>>>
>>> <appender name="FileAppender" type="Company.Appender.FileAppender, Company">
>>>
>>>  <file value="log.txt" /> 
>>>
>>> </appender>
>>>
>>> The Hierarchy repository supports setting repository level properties in the config file. Someone could write a RepositoryPropertyPatternLayout that looks for a property and uses that during the configuration process:
>>>
>>> <log4net>
>>> <property key="defaultPattern" value="%date [%thread] %-5level " />
>>> <appender name="FileAppender" type="log4net.Appender.FileAppender">
>>>  <file value="log.txt" />  
>>>  <layout type="Company.RepositoryPropertyPatternLayout, Company" value="defaultPattern" />
>>> </appender>
>>> <root>
>>>  <level value="ALL" />
>>>  <appender-ref ref="FileAppender" />
>>> </root>
>>> </log4net>
>>>
>>> The current implementation of XmlHierarchyConfigurator.Configure configures elements in the order they appear in the config file.
>>>
>>> ----- Original Message ----
>>> From: Karel Kral <kr...@volny.cz>
>>> To: Log4NET User <lo...@logging.apache.org>
>>> Sent: Tuesday, November 14, 2006 3:28:43 AM
>>> Subject: Detached definition of layout
>>>
>>> Hello, my log4net config gets to be a bit complicated. I have lot of
>>> appenders, which of them defines the same layout:
>>>
>>>       <layout type="log4net.Layout.PatternLayout">
>>>         <conversionPattern value="%date [%thread] %-5level %-35.35logger
>>> [%-10.10property{NDC}] - %message%newline" />
>>>       </layout>
>>>
>>> When I must to change definition of layout, the multiple definition of
>>> the same layout is problem - I must change the same thing on several places.
>>>
>>> Is there any possibility to define "detached" layout in log4net config
>>> and in appender only set reference to it?
>>>
>>> Example:
>>> <layout name="MySharedLayout", type="log4net.Layout.PatternLayout">
>>>    <conversionPattern value="%date [%thread] %-5level %-35.35logger
>>> [%-10.10property{NDC}] - %message%newline" />
>>>  </layout>
>>>
>>> <appender name="Global.FileAppender"
>>> type="log4net.Appender.RollingFileAppender">
>>> ...
>>> <layout-ref ref="MySharedLayout">
>>>     </appender>
>>>
>>>
>>
>>
>>
>>
> 
>