the IEventableLogger doesn't seems right, there is already the
IExtendedLogger.
ILoggingEventFactory would do it (for me): since creating a log event
is independant of anything with a logger instance, and the
LoggingEventFactory can define as much overloads as necessary to
construct a valid LoggingEvent (LogEvent doesn't sounds better btw?)
does theses properties really belongs to ILoggingEvent?
- String LoggerName { get; }
- Type DeclaringType { get; }
Also, I would like to construct events with initializer syntax but the
downside is that I can construct an invalid instance.
Last, the factory would perhaps benefit of a fluent interface
ILoggingEvent logevent = logeventfactory
.CreateEvent()
.WithLevel(LoggerLevel.Debug)
.WithMessage(message)
.WithException(ex);
the fluent builder might define an implicit cast operator to
ILoggerEvent
On Dec 9, 12:15 am, vdhant <[EMAIL PROTECTED]> wrote:
> Good point....
> At the time I mapped out the ILoggingEvent I was just going to get
> people to go "new LoggingEvent(...)" and have some overloaded
> constructors to pass in the values.
>
> But because the ILoggingEvent needs to be able to be specific per
> implementation (if required), I had to introduce the factory
> CreateLoggingEvent().
>
> I guess I didn't go back and re-look at how to populate the
> ILoggingEvent properties... I would prefer not to make each one get;
> set;.... but I really don't want to add a bunch more methods to add a
> bunch more methods to ILogger to handle the overloads for
> CreateLoggingEvent. So I am up for any ideas as far as this goes in
> the end we may need to make them get; set; to support the required
> extensibility...
>
> One thing I was thinking about though was that the change that I
> proposed requires new methods to be added to ILogger. I was thinking
> that this might break some things if people are implementing there own
> ILogger. I still think that this is the best place to put it but an
> alternative would be to introduce a new interface called
> IEventableLogger. If this was introduced ILogger would stay the same
> and IEventableLogger would define the additional methods previously
> described:
>
> public interface IEventableLogger
> {
> void Log(ILoggingEvent loggingEvent);
> ILoggingEvent CreateLoggingEvent();
> }
>
> This interface could even have overloads for the factory
> CreateLoggingEvent to handel the setting of the properties.
>
> This interface could then be implemented by any class implements
> ILogger would also be changed to implement IEventableLogger as well.
> Now I don't think that this is quite as clean as the original solution
> described but it does mean that it wouldn't change ILogger.
>
> Lastly I am interested if anyone has any ideas of how to handle the
> mapping of the LoggerLevel enum to the specific version for each log
> implementation. Besides having a mapping method with a case statement
> within each implementation (which I don't think currently exists) I am
> all ears.
>
> Cheers
> Anthony
>
> On Dec 9, 8:07 am, Gauthier Segay <[EMAIL PROTECTED]> wrote:
>
> > Hello Anthony,
>
> > seems like a OK to me.
>
> > Also, can you explain how are we setting ILoggingEvent values?
>
> > is it from CreateLoggingEvent() with dedicated overloads ?
>
> > Thanks
>
> > On Dec 8, 1:25 am, vdhant <[EMAIL PROTECTED]> wrote:
>
> > > Hi guys
> > > In reference to the specifications I provided in my last, can I take
> > > this as a go ahead for the changes that need to occur???
> > > Cheers
> > > Anthony
>
> > > On Dec 5, 12:15 pm, vdhant <[EMAIL PROTECTED]> wrote:
>
> > > > Hey guys
> > > > I have sent a little bit of time putting down on paper the changes/
> > > > additions that this unit of work will include.
> > > > Let me know what you think and I hope it pretty much makes sense
> > > > Cheers
> > > > Anthony
>
> > > > //Change to ILogger interface
> > > > // -- Castle.Core.Logging
> > > > public interface ILogger
> > > > {
> > > > ....
> > > > void Log(ILoggingEvent loggingEvent);
>
> > > > ILoggingEvent CreateLoggingEvent(); //If anyone know a
> > > > better place to get the instance from please let me know
> > > > ....
> > > > }
>
> > > > //New ILoggingEvent interface
> > > > // -- Castle.Core.Logging
> > > > public interface ILoggingEvent
> > > > {
> > > > Type DeclaringType { get; }
>
> > > > LoggerLevel LoggerLevel { get; }
>
> > > > String LoggerName { get; }
>
> > > > String Message { get; }
>
> > > > Exception Exception { get; }
> > > > }
>
> > > > //New IExtendedLoggingEvent interface
> > > > // -- Castle.Core.Logging
> > > > public interface IExtendedLoggingEvent : ILoggingEvent
> > > > {
> > > > IKeyContextProperties Properties { get; }
> > > > }
>
> > > > //New IKeyContextProperties interface
> > > > // -- Castle.Core.Logging
> > > > public interface IKeyContextProperties : IContextProperties,
> > > > IDictionary
> > > > {
> > > > }
>
> > > > //New NullLoggingEvent class
> > > > // -- Castle.Core.Logging
> > > > public class LoggingEvent : ILoggingEvent
> > > > {
> > > > ....
> > > > }
>
> > > > //New NullLoggingEvent class
> > > > // -- Castle.Core.Logging
> > > > public class NullLoggingEvent : IExtendedLoggingEvent
> > > > {
> > > > ....
> > > > }
>
> > > > //New NullKeyContextProperties Class
> > > > // -- Castle.Core.Logging
> > > > public class NullKeyContextProperties : IKeyContextProperties
> > > > {
> > > > ....
> > > > }
>
> > > > //New LoggingEvent Class
> > > > // -- Castle.Services.Logging.Log4netIntegration
> > > > public class LoggingEvent : Castle.Core.Logging.LoggingEvent
> > > > {
> > > > private log4Net.Core.LoggingEvent _InnerLoggingEvent;
> > > > ....
> > > > public LoggingEvent(Type declaringType, LoggerLevel
> > > > loggerLevel, String loggerName, String message, Exception exception)
> > > > {
> > > > _InnerLoggingEvent = new log4Net.Core.LoggingEvent
> > > > (declaringType, loggerLevel, loggerName, message, exception);
> > > > }
> > > > ....
> > > > public log4Net.Core.LoggingEvent InnerLoggingEvent
> > > > {
> > > > get { return _InnerLoggingEvent; }
> > > > }
> > > > ....
> > > > }
>
> > > > //New ExtendedLoggingEvent Class
> > > > // -- Castle.Services.Logging.Log4netIntegration
> > > > public class ExtendedLoggingEvent :
> > > > Castle.Services.Logging.Log4netIntegration.LoggingEvent,
> > > > IExtendedLoggingEvent
> > > > {
> > > > private IKeyContextProperties _Properties;
> > > > ....
> > > > public ExtendedLoggingEvent(Type declaringType, LoggerLevel
> > > > loggerLevel, String loggerName, String message, Exception exception)
> > > > : base(declaringType, loggerLevel, loggerName, message,
> > > > exception)
> > > > {
> > > > }
> > > > ....
> > > > public IKeyContextProperties Properties
> > > > {
> > > > if (_Properties == null)
> > > > _Properties = new LocalContextProperties
> > > > (this.InnerLoggingEvent.Properties);
> > > > return _Properties;
> > > > }
> > > > ....
> > > > }
>
> > > > //New LocalContextProperties Class
> > > > // -- Castle.Services.Logging.Log4netIntegration
> > > > public class LocalContextProperties : IKeyContextProperties
> > > > {
> > > > private log4net.Util.PropertiesDictionary _InnerProperties;
> > > > ....
> > > > public LocalContextProperties
> > > > (log4net.Util.PropertiesDictionary innerProperties)
> > > > {
> > > > _InnerProperties = innerProperties;
> > > > }
> > > > ....
> > > > public object this[string key]
> > > > {
> > > > get { return _InnerProperties.Properties[key]; }
> > > > set { _InnerProperties.Properties[key] = value; }
> > > > }
> > > > ....
> > > > }
>
> > > > //Changes to Log4netLogger Class
> > > > // -- Castle.Services.Logging.Log4netIntegration
> > > > public class Log4netLogger
> > > > {
> > > > ....
> > > > public override ILoggingEvent CreateLoggingEvent()
> > > > {
> > > > return new LoggingEvent();
> > > > }
> > > > ....
> > > > void override Log(ILoggingEvent loggingEvent)
> > > > {
> > > > Castle.Services.Logging.Log4netIntegration.LoggingEvent
> > > > innerLoggingEvent = loggingEvent as
> > > > Castle.Services.Logging.Log4netIntegration.LoggingEvent();
> > > > if (innerLoggingEvent == null)
> > > > throw new Exception("Wrong Type");
>
> > > > Logger.Log(innerLoggingEvent.InnerLoggingEvent);
> > > > }
> > > > ....
> > > > }
>
> > > > //Changes to ExtendedLog4netLogger Class
> > > > // -- Castle.Services.Logging.Log4netIntegration
> > > > public class ExtendedLog4netLogger
> > > > {
> > > > ....
> > > > public override ILoggingEvent CreateLoggingEvent()
> > > > {
> > > > return new ExtendedLoggingEvent();
> > > > }
> > > > ....
> > > > }
>
> > > > //New ExtendedLoggingEvent Class
> > > > // -- Castle.Services.Logging.NLogtIntegration
> > > > public class LoggingEvent : Castle.Core.Logging.LoggingEvent
> > > > {
> > > > ....
> > > > //Similar implementation pattern as Log4Net version except for
> > > > nLog
> > > > ....
> > > > }
>
> > > > //New ExtendedLoggingEvent Class
> > > > // -- Castle.Services.Logging.NLogtIntegration
> > > > public class ExtendedLoggingEvent :
> > > > Castle.Services.Logging.NLogtIntegration.LoggingEvent,
> > > > IExtendedLoggingEvent
> > > > {
> > > > ....
> > > > //Similar implementation pattern as Log4Net version except for
> > > > nLog
> > > > ....
> > > > }
>
> > > > //New LocalContextProperties Class
> > > > // -- Castle.Services.Logging.NLogtIntegration
> > > > public class LocalContextProperties : IKeyContextProperties
> > > > {
> > > > ....
> > > > //Similar implementation pattern as Log4Net version except for
> > > > nLog
> > > > ....
> > > > }
>
> > > > //Changes to NLogLogger Class
> > > > // -- Castle.Services.Logging.NLogtIntegration
> > > > public class NLogLogger
> > > > {
> > > > ....
> > > > //Similar
>
> ...
>
> read more »
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Castle Project Development List" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/castle-project-devel?hl=en
-~----------~----~----~----~------~----~------~--~---