Thanks Ron, that looks like it will allow me to populate the Properties collection of the LoggingEvent instance.
Then, considering that the actual properties logged will differ per event I guess I would combine this with my custom Layout class. I think that gives me what I need. Thanks again. Ron Grabowski wrote: > > public class LogManager > { > public static GetLogger<T>() > { > return new LogEx(LogManager.GetLogger(typeof(T))); > } > } > > // untested...I think I'm forgetting a constructor > public class LogEx : LogImpl > { > private readonly static Type declaringType = typeof(LogEx); > > public void Info(string message, IDictionary properties) > { > if (IsInfoEnabled) > { > LoggingEvent loggingEvent = new LoggingEvent( > declaringType, > Logger.Repository, > Logger.Name, > Level.Info, > message, > t); > foreach (var entry in properites) > { > loggingEvent.Properties[entry.Key.ToString()] = entry.Value; > } > Logger.Log(loggingEvent); > } > } > } > > http://www.mail-archive.com/log4net-user@logging.apache.org/msg04357.html > > > ----- Original Message ---- > From: AdamTappis <adamtap...@hotmail.com> > To: log4net-user@logging.apache.org > Sent: Monday, August 17, 2009 11:08:44 AM > Subject: Re: Adding custom logging properties > > > Having a closer look at the documentation, the Properties property of the > LoggingEvent class is a PropertiesDictionary which derives from > ReadOnlyPropertiesDictionary which menas it can't be written to and hence > it's not suitable for my purposes. > > Any ideas? > > > AdamTappis wrote: >> >> Ross, >> >> I guess that's why I'm posting here, because I'm trying to devise a >> pattern and some coding guidelines so that all our applications log >> consistently. I considered wrapping log4net but all I've read advises >> against that. So what I'm trying to achieve is an elegant solution that >> makes the best use of the framework. >> >> You're right, I wish to log a collection of Key-Value pairs associated >> with a given loggin event. e.g. >> statistics - >> <eventData><duration>3ms</duration><size>10kb</size></eventData> >> details - >> <eventData><customerID>3</customerID><orderID>10</orderID></eventData> >> >> The question I'm asking is how best to implement this with log4net? >> >> Should I write a wrapper or a helper class that accepts the key-Value >> pairs collection as a parameter and returns a formattred XML string that >> then get's logged? >> >> Maybe I should be creating a LoggingEvent in code manually, adding the >> Key-Value pairs to the Properties collection and then using >> ILog.Logger.Log to actually log the event rather than using Ilog.Info() >> to >> log. I could than write a custom layout class that serialises the >> properties out as an XML string. >> >> like I said, I'm not sure and am looking for some disrection. >> >> Ideally I would have the following interface available to me: >> >> ILog.Info(string message, Dictionary customProperties) >> >> and then it would be the configuration that drives how the >> customProperties are rendered by specifying the approporiate Layout >> class. >> That way I could format the customProperties to a file in one way and to >> a >> Db as XML etc... without embedding the formatting logic in my code. >> >> >> Ross Hinkley wrote: >>> >>> Adam, >>> >>> How are these properties getting transformed from a logging call to XML? >>> Are you asking if there's a way to modify a custom format on the fly and >>> then turn the custom properties into XML? (I'm thinking of something >>> like >>> appending name-value pairs to the log format and having a custom >>> appender >>> do >>> the XML conversion for you. This doesn't seem terribly elegant.) >>> >>> Maybe I'm over-trivializing, but it seems to me you should be able to >>> use >>> custom properties to take care of your current needs, converting your >>> properties to XML in code, then modifying the ADO appender configuration >>> to >>> handle that property appropriately when the logging database is >>> implemented. >>> >>> I guess another question would be what sorts of things need to be >>> serialized? Are they going to be serialized from a class? >>> >>> -Ross >>> >>> On Mon, Aug 17, 2009 at 8:12 AM, AdamTappis <adamtap...@hotmail.com> >>> wrote: >>> >>>> >>>> Hi, >>>> >>>> I've been evaluating log4net recently with a view to using the >>>> framework >>>> as >>>> a loggin standard for our enterprise applicaption. I see it very easy >>>> to >>>> extend the framework, however I have some specific logging requirements >>>> and >>>> I'm not sure what would be the easiest way implement these with minimal >>>> coding. >>>> >>>> At some time in the future, we aim to build a consolidated logging >>>> database >>>> that will capture logging data from our server application suite. The >>>> information that needs to be logged will differ per >>>> service/applicaption >>>> and >>>> to that end I would aim to have a table schema that has the standard >>>> logging >>>> columns plus a generic XML column (no defined schema) to act as a >>>> property >>>> bag for custom information associated with a specific event. >>>> >>>> We don't have time to develop the logging repository at present, >>>> however >>>> I'm >>>> stressing that we should build logging into our code from the start >>>> rather >>>> than trying to retro-fitting it later which would be far more costly. >>>> >>>> So I need my code to be able to fire off logging messages with a list >>>> or >>>> arbitrary custom properties that get formatted into an XML string. For >>>> now >>>> the messages can be written to a text file and later we'll configure >>>> and >>>> AdoNetAppender to write to out logging database. >>>> >>>> So my questions are: >>>> - Is this possible using configuration only? (I susopect not) >>>> - If not then which custom objects do I need to create? From what I've >>>> seen >>>> so far I think I'll need to code my own Layout Class >>>> - The ILog interface doesn't doesn't expose a method that takes a >>>> property >>>> bag (or dictionary), but it appears that the LoggingEvent object does. >>>> Does >>>> that mean I would have to make my logging calls using >>>> ILog.Logger.Log()? >>>> - Could someone provide some sample code please? >>>> -- >>>> View this message in context: >>>> http://www.nabble.com/Adding-custom-logging-properties-tp25006538p25006538.html >>>> Sent from the Log4net - Users mailing list archive at Nabble.com. >>>> >>>> >>> >>> >> >> > > -- > View this message in context: > http://www.nabble.com/Adding-custom-logging-properties-tp25006538p25008536.html > Sent from the Log4net - Users mailing list archive at Nabble.com. > > -- View this message in context: http://www.nabble.com/Adding-custom-logging-properties-tp25006538p25023045.html Sent from the Log4net - Users mailing list archive at Nabble.com.