[ 
https://issues.apache.org/jira/browse/SYNAPSE-374?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12607851#action_12607851
 ] 

Asankha C. Perera commented on SYNAPSE-374:
-------------------------------------------

Yep.. very interesting indeed...!

+1 asankha

> Simplify the way logging is done in mediators
> ---------------------------------------------
>
>                 Key: SYNAPSE-374
>                 URL: https://issues.apache.org/jira/browse/SYNAPSE-374
>             Project: Synapse
>          Issue Type: Improvement
>          Components: Core
>    Affects Versions: NIGHTLY
>         Environment: N/A
>            Reporter: Andreas Veithen
>
> Mediators can log messages to three different logs: the usual log with 
> category set to the class name, the trace log and the service log. While this 
> is extremely useful and should be preserved, the way mediators have to be 
> coded to leverage these logging facilities could be improved. Indeed the 
> following problems with the current situation can be identified:
> * Code using the logging methods defined in AbstractMediator can't be reused 
> in anything else then mediators. A random example is the 
> SpringMediator#buildAppContext method. The code in this method can quite 
> easily be reused in another mediator (provided that both mediators have a 
> common base class) but not e.g. in a Startup implementation. The reason is 
> that it uses the traceOrDebug method from AbstractMediator.
> * In general, when the code in a mediator is split into several methods or 
> when reusing a method in several mediators, it is required to pass 
> traceOrDebugOn and traceOn from one method to the other. This is quite 
> annoying.
> * For someone who starts writing new mediators it is not obvious how to 
> correctly use the various logging methods. In addition, the current 
> implementation doesn't enforce a consistent use of the logging facilities, 
> one of the reasons being that the log and trace attributes in 
> AbstractMediator are accessible to subclasses. E.g. there are mediators that 
> simply call log.error, thereby bypassing the TRACE and SERVICE logs.
> To improve the situation, the proposal is to:
> (1) Introduce an interface called SynapseLog with
> * a set of logging methods such as error, info, traceOrDebug, auditWarn, etc. 
> (mainly equivalent to what is defined now in AbstractMediator);
> * a set of corresponding isXxxEnabled methods following the pattern in 
> commons-logging.
> (2) Add a getLog(MessageContext) method to AbstractMediator that returns an 
> appropriate implementation of the SynapseLog interface. Mediator 
> implementations would call this method at the beginning of the mediate method 
> and exclusively rely on the returned object to send messages to the logs. If 
> the code in the mediator is split into several methods or if it shares a 
> common method with another mediator, this object would be passed as argument 
> to these methods (instead of traceOrDebugOn and traceOn).
> (3) Create a SynapseLogAdapter class that implements SynapseLog and that 
> delegates calls to a single org.apache.commons.logging.Log instance. 
> Instances of this class would be used by code that is executed outside of a 
> mediator but that needs to call a method shared with some mediator 
> implementation.
> To summarize, the general idea is to expose a set of (Synapse specific) 
> logging categories in a well defined interface and to completely hide the 
> underlying implementation(s) behind this interface. Note that the proposal 
> can be implemented without breaking any existing code: it can coexist with 
> the existing logging methods in AbstractMediator which would later be tagged 
> as deprecated before potentially being removed in some future version of 
> Synapse.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to