Yes it will be possible to use the PatternString to set the value of any
string property in the configuration using the following example syntax:


<file 
  type="log4net.Util.PatternString" 
  value="%property{BIN_DIR}\\..\\logs\\Application.log" />

We may look at ways of making this simpler so that the type attribute
does not need to be specified.

Nicko


> -----Original Message-----
> From: Jonathan Beeston [mailto:[EMAIL PROTECTED] 
> Sent: 07 September 2004 11:07
> To: Log4NET Dev
> Subject: Re: RE: Application level keyed pair properties
> 
> Hello Nicko.
> 
> Will this enable the use of such properties in the value 
> attribute of the File element of a FileAppender and 
> RollingFileAppender configuration?
> 
> E.g.:
>       <appender name="RollingFile" 
> type="log4net.Appender.RollingFileAppender">
>               <file 
> value="%property{BIN_DIR}\\..\\logs\\Application.log" />
>               <appendToFile value="true" />
>               <maximumFileSize value="128KB" />
>               <maxSizeRollBackups value="16" />
>               <layout type="log4net.Layout.PatternLayout">
>                       <conversionPattern value="%d{dd MMM 
> yyyy HH:mm:ss,SSS} [%t] %-5p %c %x - %m%n" />
>               </layout>
>       </appender>
> 
> Thanks.
> 
> Jonathan.
> 
> From: "Nicko Cadell" <[EMAIL PROTECTED]>
> Date: 2004/09/06 Mon PM 01:23:37 GMT
> To: "Log4NET Dev" <[email protected]>, 
>       <[EMAIL PROTECTED]>
> Subject: RE: Application level keyed pair properties
> 
> Jonathan,
> 
> This is a good plan, so good in fact that I have been working 
> on similar functionality using the new GlobalContext.
> Essentially you will be able to store global properties in 
> the GlobalContext.Properties map. These value can then be 
> retrieved during configuration using the new PatternString 
> class. This uses formatting similar to the PatternLayout, 
> e.g. %property{OUTPUT_DIR}.
> 
> Cheers,
> 
> Nicko
>   
> 
> > -----Original Message-----
> > From: Jonathan Beeston [mailto:[EMAIL PROTECTED]
> > Sent: 26 August 2004 16:19
> > To: [email protected]
> > Subject: Application level keyed pair properties
> > 
> > Hello.
> > 
> > As for my previous post, I admit it was not a good idea.  Sorry.
> > 
> > I am currently developing a 'Visual Studio .NET' pluging.  
> > However, the relative file base for these is the binary 
> directory of 
> > 'Visual Studio .NET' itself, and not the binary director of 
> the actual 
> > plugin when installed.  Therefore, I have found that the 
> unrooted file 
> > properties in the configuration files seems to be relative 
> to 'Visual 
> > Studio .NET', and not the installed plugin binary directory, as 
> > required.  I have therefore made a few minor, and I believe 
> > non-breaking', modifications.  Would it be possible to have these 
> > included at some point, if you think they are appropriate.  
> Thank you.
> > 
> > These modification consist of a small change to two files, 
> and one new 
> > file.  These changes allow the adding of applicatoin level, 
> as opposed 
> > to system  environment level, variables at runtime.  If set 
> before the 
> > configuration of log4net, these keyed pair values can be used as if 
> > they were environment variables in the log4net configuration file.
> > 
> > The following are the changes to the two files, in unified diff 
> > format.
> > 
> > Index: OptionConverter.cs
> > ===================================================================
> > RCS file: 
> > /home/cvspublic/logging-log4net/src/Util/OptionConverter.cs,v
> > retrieving revision 1.6
> > diff -u -r1.6 OptionConverter.cs
> > --- OptionConverter.cs      7 Jun 2004 00:58:44 -0000       1.6
> > +++ OptionConverter.cs      26 Aug 2004 14:30:59 -0000
> > @@ -463,7 +463,7 @@
> >             /// values of keys found in <paramref name="props"/>.
> > 
> >             /// </summary>
> > 
> >             /// <param name="value">The string on which 
> variable substitution 
> > is performed.</param>
> > 
> > -           /// <param name="props">The dictionary to use 
> > to lookup variables.</param>
> > 
> > +           /// <param name="props">The array of
> > dictionaries to use to lookup
> > +variables.</param>
> > 
> >             /// <remarks>
> > 
> >             /// <para>
> > 
> >             /// The variable substitution delimiters are 
> <b>${</b> and 
> > <b>}</b>.
> > 
> > @@ -501,7 +501,7 @@
> >             /// </para>
> > 
> >             /// </remarks>
> > 
> >             /// <returns>The result of the substitutions.</returns>
> > 
> > -           public static string SubstituteVariables(string 
> > value, System.Collections.IDictionary props)
> > 
> > +           public static string SubstituteVariables(string
> > value, params
> > +System.Collections.IDictionary [] props)
> > 
> >             {
> > 
> >                     StringBuilder buf = new StringBuilder();
> > 
> >  
> > 
> > @@ -536,12 +536,17 @@
> >                                             j += DELIM_START_LEN;
> > 
> >                                             string key =
> > value.Substring(j, k - j);
> > 
> >  
> > 
> > -                                           string 
> > replacement = props[key] as string;
> > 
> > -
> > 
> > -                                           if (replacement 
> > != null)
> > 
> > -                                           {
> > 
> > -                                                   
> > buf.Append(replacement);
> > 
> > -                                           }
> > 
> > +                                           
> > foreach(System.Collections.IDictionary propDic in props)
> > +                                           {
> > +                                                   string
> > replacement = propDic[key] as string;
> > +
> > +                                                   if
> > (replacement != null)
> > +                                                   {
> > +                                                           
> > buf.Append(replacement);
> > +                                                           break;
> > +                                                   }
> > +                                           }
> > +
> >                                             i = k + 
> > DELIM_STOP_LEN;             
> > 
> >                                     }
> > 
> >                             }
> > 
> > 
> > 
> > Index: XmlHierarchyConfigurator.cs
> > ===================================================================
> > RCS file: 
> > /home/cvspublic/logging-log4net/src/Repository/Hierarchy/XmlHi
> > erarchyConfigurator.cs,v
> > retrieving revision 1.8
> > diff -u -r1.8 XmlHierarchyConfigurator.cs
> > --- XmlHierarchyConfigurator.cs     19 Aug 2004 21:31:09 
> > -0000       1.8
> > +++ XmlHierarchyConfigurator.cs     26 Aug 2004 14:32:54 -0000
> > @@ -542,7 +542,7 @@
> >                                     try
> > 
> >                                     {
> > 
> >                                             // Expand
> > environment variables in the string.
> > 
> > -                                           propertyValue = 
> > OptionConverter.SubstituteVariables(propertyValue,
> > Environment.GetEnvironmentVariables());
> > 
> > +                                           propertyValue =
> > +OptionConverter.SubstituteVariables(propertyValue,
> > +Environment.GetEnvironmentVariables(), AppVars.Instance);
> > 
> >                                     }
> > 
> >                                     
> > catch(System.Security.SecurityException)
> > 
> >                                     {
> > 
> > 
> > 
> > The following is the new file:
> > 
> > #region Copyright & License
> > //
> > // Copyright 2001-2004 The Apache Software Foundation // // 
> Licensed 
> > under the Apache License, Version 2.0 (the "License"); // 
> you may not 
> > use this file except in compliance with the License.
> > // You may obtain a copy of the License at // // 
> > http://www.apache.org/licenses/LICENSE-2.0
> > //
> > // Unless required by applicable law or agreed to in 
> writing, software 
> > // distributed under the License is distributed on an "AS 
> IS" BASIS, 
> > // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
> > implied.
> > // See the License for the specific language governing 
> permissions and 
> > // limitations under the License.
> > //
> > #endregion
> > 
> > using System;
> > using System.Collections;
> > 
> > namespace log4net.Util
> > {
> >     /// <summary>
> >     /// A singleton of <see
> > cref="System.Collections.Hashtable"/>, intended to
> >     /// sotre application level, as opposed to system 
> environment level,
> >     /// variables.
> >     /// </summary>
> >     /// <author>Jonathan Simon Beeston</author> #if !NETCF
> >     [Serializable]
> > #endif
> >     public sealed class AppVars : Hashtable
> >     {
> >             #region Private Instance Constructors
> > 
> >             /// <summary>
> >             /// Initializes a new instance of the <see 
> cref="AppVars" /> class.
> >             /// </summary>
> >             /// <remarks>
> >             /// Uses a private access modifier to enforce 
> the singleton pattern.
> >             /// </remarks>
> >             private AppVars()
> >             {
> >             }
> > 
> >             #endregion Private Instance Constructors
> >   
> >             #region Public Static Properties
> > 
> >             /// <summary>
> >             /// Gets the singleton instance.
> >             /// </summary>
> >             /// <returns>The singleton instance.</returns>
> >             public static AppVars Instance
> >             {
> >                     get
> >                     {
> >                             return s_instance;
> >                     }
> >             }
> > 
> >             #endregion Public Static Properties
> > 
> >             #region Public Instance Methods
> > 
> >             /// <summary>
> >             /// Adds a keyed value to the singleton instance.
> >             /// </summary>
> >             /// <para>If a keyed value pair with the same 
> key as that
> >             /// contained in 'key', then is ir removed before it is 
> > added.</para>
> >             /// <param name="key">The key for the keyed 
> value pair.</param>
> >             /// <param name="value">The value for the keyed 
> value pair.</param>
> >             public override void Add(object key, object value)
> >             {
> >                     if(base.ContainsKey(key) == true)
> >                     {
> >                             base.Remove(key);
> >                     }
> >                     base.Add (key, value);
> >             }
> > 
> >             #endregion Public Instance Methods
> > 
> >             #region Private Static Fields
> > 
> >             /// <summary>
> >             /// The singleton instance of the empty collection.
> >             /// </summary>
> >             private readonly static AppVars s_instance = 
> new AppVars();
> >   
> >             #endregion Private Static Fields
> >     
> >     }
> > }
> > 
> > 
> > Thank you.
> > 
> > Yours sincerely,
> > Jonathan Simon Beeston.
> > 
> > 
> > -----------------------------------------
> > Email provided by http://www.ntlhome.com/
> > 
> > 
> > 
> 
> 
> -----------------------------------------
> Email provided by http://www.ntlhome.com/
> 
> 
> 

Reply via email to