[
https://issues.apache.org/jira/browse/PROTON-343?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13695403#comment-13695403
]
Philip Harvey edited comment on PROTON-343 at 7/1/13 10:50 AM:
---------------------------------------------------------------
Here are some rough notes about how the code should look that I agreed with
Robbie and Rob. The previously-attached patch will be modified in line with
the notes below.
{code}
//Applications can plug in custom behaviour in several ways:
engineFactory.setEngineLogger(myCustomEngineLogger)
engineFactory.setEngineLogger(new CategoryLoggerWrapper(myCustomCategoryLogger))
CategoryLoggerWrapper.setDefaultCategoryLogger(myCustomCategoryLogger)
connection.setEngineLogger(myCustomEngineLogger)
((CategoryLoggerWrapper)connection.getEngineLogger()).setCategoryLogger(myCustomCategoryLogger)
// How the new JMS client will probably do it:
class JMSConnectionImpl
{
CategoryLoggerWrapper.setDefaultCategoryLogger(new Slf4JCategoryLogger());
// defined in Proton
}
// public class defined in proton-api
public class CategoryLoggerWrapper implements EngineLogger, MessengerLogger...
{
private static final JUL_CATEGEORY_LOGGER = new JulCategoryLogger()
private CategoryLogger _categoryLogger = JUL_CATEGEORY_LOGGER // or use
the logger defined in a system property if set
static setDefaultCategoryLogger(logger);
setCategoryLogger(logger)
logFrameReceived(Connection, ....)
{
_categoryLogger.log(FRAME_CATEGORY, "blah blah")
}
logMessengerStuff(...)
}
// used by Python tests
public class RememberingLogger implements EngineLogger
{
... just remembers its invocations so we can assertion correct behaviour of
ConnectionImpl
}
class EngineFactoryImpl
{
public Connection createConnection()
{
conn = return new ConnectionImpl(_engineLogger);
}
}
class SenderImpl
{
...
getEngineLogger().logStuff(getConnection(), ....)
}
{code}
was (Author: philharveyonline):
Here are some rough notes about how the code should look that I agreed with
Robbie and Rob. The previously-attached patch will be modified in line with
the notes below.
{code}
//Applications can plug in custom behaviour in several ways:
engineFactory.setEngineLogger(myCustomEngineLogger)
engineFactory.setEngineLogger(new CategoryLoggerWrapper(myCustomEngineLogger))
CategoryLoggerWrapper.setDefaultCategoryLogger(myCustomCategoryLogger)
connection.setEngineLogger(myCustomEngineLogger)
((CategoryLoggerWrapper)connection.getEngineLogger()).setCategoryLogger(myCustomCategoryLogger)
// How the new JMS client will probably do it:
class JMSConnectionImpl
{
CategoryLoggerWrapper.setDefaultCategoryLogger(new Slf4JCategoryLogger());
// defined in Proton
}
// public class defined in proton-api
public class CategoryLoggerWrapper implements EngineLogger, MessengerLogger...
{
private static final JUL_CATEGEORY_LOGGER = new JulCategoryLogger()
private CategoryLogger _categoryLogger = JUL_CATEGEORY_LOGGER // or use
the logged defined in a system property if set
static setDefaultCategoryLogger(logger);
setCategoryLogger(logger)
logFrameReceived(Connection, ....)
{
_categoryLogger.log(FRAME_CATEGORY, "blah blah")
}
logMessengerStuff(...)
}
// used by Python tests
public class RememberingLogger implements EngineLogger
{
... just remembers its invocations so we can assertion correct behaviour of
ConnectionImpl
}
class EngineFactoryImpl
{
public Connection createConnection()
{
conn = return new ConnectionImpl(_engineLogger);
}
}
class SenderImpl
{
...
getEngineLogger().logStuff(getConnection(), ....)
}
{code}
> Add a pluggable Proton logging layer
> ------------------------------------
>
> Key: PROTON-343
> URL: https://issues.apache.org/jira/browse/PROTON-343
> Project: Qpid Proton
> Issue Type: Improvement
> Components: proton-c, proton-j
> Reporter: Philip Harvey
> Assignee: Philip Harvey
> Attachments:
> 0001-PROTON-343-sketched-out-the-Java-parts-of-the-propos.patch
>
>
> Applications that use Proton sometimes want Proton to produce logging.
> Goals
> ====
> * Proton should provide a default logging implementation.
> * It should be easy for Proton client code to provide custom logging
> implementation, e.g. one that uses the same third party logging framework as
> their application code.
> * Proton should not have a compile-time dependency on a third party logging
> framework
> * Proton's log output is considered to be part of its public interface.
> Therefore, in the spirit of Proton's cross-language consistency goals, this
> output should be consistent between proton-c and proton-j.
> * The goals that general-purpose logging frameworks try to meet -
> performance, ease of use etc - also apply.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira