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 <[email protected]> > 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-tp25006538p25008083.html Sent from the Log4net - Users mailing list archive at Nabble.com.
