[ 
https://issues.apache.org/jira/browse/LOG4NET-565?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16020094#comment-16020094
 ] 

Dominik Psenner commented on LOG4NET-565:
-----------------------------------------

I imagined an Appender that works almost like the ForwardingAppender does 
today. It differs in that it allows injection of a service locator interface 
implementation, much like the one you have provided. During ActivateOptions() 
it would then call the service locator and obtain an instance of the requested 
appender. Alternatively it could ask the service locator for an appender when 
it processes a log event. Something like:

{code}
class AppenderLocatorForwardingAppender : AppenderSkeleton {
    public IAppenderLocator AppenderLocator { get; set; }
    public string[] AppenderLocatorArguments { get; set; }
    protected IAppender AppenderImpl { get; private set; }
    public override ActivateOptions() {
        // TODO sanity checks etc
        AppenderImpl = AppenderLocator.GetInstance(AppenderLocatorArguments);
    }
    public override void Append(LogEvent logEvent) {
        AppenderImpl.DoAppend(logEvent);
    }
    protected override OnClose() {
        // TODO forward Close() to appender locator
    }
}
{code}

or:

{code}
class AppenderLocatorForwardingAppender : AppenderSkeleton {
    public IAppenderLocator AppenderLocator { get; set; }
    public string[] AppenderLocatorArguments { get; set; }
    public override void ActivateOptions() {
        // TODO sanity checks and forward to AppenderLocator
    }
    public override void Append(LogEvent logEvent) {
        IAppender appenderImpl = 
AppenderLocator.GetInstance(AppenderLocatorArguments);
        appenderImpl.DoAppend(logEvent);
    }
    protected override OnClose() {
        // TODO forward to AppenderLocator
    }
}
{code}

This way the implementation rather straight forward, reuses existing features 
(like filtering etc) and can be combined with other appenders much like the 
ForwardingAppender does today.

Please note that option two may need an enhanced service locator or a 
IServiceLocatorAppender API to allow for a better resource allocation and 
disposal that after all ends up being the IAppender API and thus option one is 
most probably the better approach.

> Dependency Injection support appender and logger types
> ------------------------------------------------------
>
>                 Key: LOG4NET-565
>                 URL: https://issues.apache.org/jira/browse/LOG4NET-565
>             Project: Log4net
>          Issue Type: Improvement
>          Components: Appenders, Core
>            Reporter: Hitesh Chauhan
>              Labels: Enhancement
>
> I have seen demand for dependency injection support in log4net. I have added 
> that behavior to my local repository. And I would like to push that to 
> log4net library.
> e.g. appender configuration
> <appender
> name="ServiceAppender" 
> type="LoggingServiceAppender"               
> serviceLocatorType="Log4NetServiceLocator">



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to