[ https://issues.apache.org/jira/browse/DIRMINA-445?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12531159 ]
Trustin Lee commented on DIRMINA-445: ------------------------------------- However, I am just worried about losing this advantage: * users can use all methods of org.slf4j.Logger while currently IoSessionLogger only offers a subset We could modify IoSessionLogger to provide all the methods, but does it worth? Assuming all users are going to use MdcInjectionFilter eventually, we might be just OK to remove IoSessionLogger. I'd like to know what others think about this issue. > SessionLog improvement > ---------------------- > > Key: DIRMINA-445 > URL: https://issues.apache.org/jira/browse/DIRMINA-445 > Project: MINA > Issue Type: Improvement > Components: Core > Affects Versions: 1.1.3, 2.0.0-M1 > Environment: Use Object instead of String inSessionLog logging method > to allow for massive perfs improvement on production running instances (when > logs filtering is used). > Reporter: vincent bourdaraud > Assignee: Maarten Bosteels > Priority: Minor > Fix For: 2.0.0-M1 > > > SessionLog.debug(IoSession,String), info(IoSession,String), > warn(IoSession,String) and error(IoSession,String) should be changed to > SessionLog.debug(IoSession,Object), info(IoSession,Object), > warn(IoSession,Object) and error(IoSession,Object), as in log4j. > The reason for this is that if passing Objects instead of String allow to > delay the composition of the logging message (.toString() call) until really > needed and that could greatly improve performance. This kind of feature is > needed to build SW able to be turned in debug while in production using > NDC/MDC filters (using log4j e.g.). > Some code snippet the illustrate this: > public void messageReceived(IoSession session, Object o) throws Exception > { > MyProtocolRequest req = (MyProtocolRequest) o; > NDC.put(req.getUserId()); > SessionLog.debug(session, new RequestDumper(req)); > NDC.pop(); > } > > class RequestDumper() > { > public RequestDumper(MyProtocolRequest req) > { > this.req = req; > } > > public String toString() > { > return req.toString(); > } > > private MyProtocolRequest req; > } > In that snippet, the cost of converting MyProtocolRequest to a String is not > paied when SessionLog.debug() is called, but when the underlying logging > framework needs the string for logging. The perf improvement could be massive > if the underlying protocol uses some kind of filtering to filter-out most > debug logs; in that example, the logging framework would be configured to > filter-in only logs with a NDC set to a specific user. > With this feature, we could enable debug in production for some few users > only, without killing the overall performances. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.