What I am proposing here are a mere ideas that will need further investigation. I have not tried any of these ideas. You will have to prioritize these ideas based on your requirements.
A. Implement an extension class for the ILog interface B. Implement a custom ILog interface implementation and a LoggerFactory. C. Define custom loglevels D. Use thread context properties altogether with custom format layouts E. Log "complex" classes that hold your category information and find a way to format them There might be more things that you could do.. On 22 Oct 2016 5:31 p.m., "Nicholas Duane" <nic...@msn.com> wrote: > Is there a way for me to inject properties into a LoggingEvent? I'm > trying to accomplish this without the user (of log4net) doing anything > special. The only thing I could think of was wrapping loggers, and while > I'm not against doing that it would have to be done via configuration as I > don't want the user to have to do it programmatically. Is there any way > for me to inject a logger wrapper via configuration? > > > The reason I'm looking to do this is that I would like to set a property > on the LoggingEvent to use for filtering. This property would be > determined based on the level property. I could simply use the level > property for filtering, but I have other events which I generate which are > all logged at the Emergency level but have a different value for this > property so for them I'm using this property for filtering. I don't have > the same issue with these other events because they are logged via an > extension method I provided on the ILog interface: > > > public static class Logging > > { > > public static void LogEvent(this ILog logger, Category category, > IEvent evnt) > > { > > if ((category != null) && (evnt != null)) > > { > > evnt.SetCategory(category.Name); > > LoggingEvent le = new LoggingEvent(null, > logger.Logger.Respository, > > logger.Logger.Name, Level.Emergency, evnt, null); > > le.Properties["category"] = category.Name; > > logger.Logger.Log(le); > > } > > } > > } > > > So for instance when a user does the following: > > > logger.Error("this is my error message"); > > or > > logger.Warn("this is my warning message"); > > or > > logger.Info("this is my info message"); > > > I would like to set the property "category" on the LoggingEvent to > "criticalDiagnostic". When they do: > > > logger.Debug("this is my debug message"); > > or > > logger.Trace("this is my trace message"); > > > I would like to set the property "category" on the LoggingEvent to > "noncriticalDiagnostic". Any way for me to do that automagically? > > I also posted this at: > > > http://stackoverflow.com/questions/40187597/injecting- > properties-into-log4nets-loggingevent > > > Thanks, > > Nick >