[ 
https://issues.apache.org/jira/browse/HADOOP-6884?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12899145#action_12899145
 ] 

Doug Cutting commented on HADOOP-6884:
--------------------------------------

> 1. Code must remain as readable/simple as possible and maintainable (no 
> wrapping isDebugEnabled() in all of source code).

Does anyone believe that?  I think the guards should ideally be limited to 
performance sensitive parts of the code.  But if folks don't trust that can be 
maintained, then a warning when non-constant strings are logged might be 
acceptable.  Constant strings should be as fast as the guard.

> 2. Code must perform best (no varargs, autoboxing, string concatenation, etc 
> for unused debug lines)

We could easily implement a guard that both performs well and does not bloat 
code, e.g.:
{code}
public static void debugLog(String message) { LOG.debug(message); }
public static void debugLog(String message, Object o1) {
  if (LOG.isDebugEnabled())
    LOG.debug(MessageFormat.format(message, new Object[] {o1}));
}
public static void debugLog(String message, Object o1, Object o2) {
  if (LOG.isDebugEnabled())
    LOG.debug(MessageFormat.format(message, new Object[] {o1, o2}));
}
public static void debugLog(String message, Object o1, Object o2, Object o3) {
  if (LOG.isDebugEnabled())
    LOG.debug(MessageFormat.format(message, new Object[] {o1, o2, o3}));
}
...
{code}

> Add LOG.isDebugEnabled() guard for each LOG.debug("...")
> --------------------------------------------------------
>
>                 Key: HADOOP-6884
>                 URL: https://issues.apache.org/jira/browse/HADOOP-6884
>             Project: Hadoop Common
>          Issue Type: Improvement
>    Affects Versions: 0.22.0
>            Reporter: Erik Steffl
>            Assignee: Erik Steffl
>             Fix For: 0.22.0
>
>         Attachments: HADOOP-6884-0.22-1.patch, HADOOP-6884-0.22.patch
>
>
> Each LOG.debug("...") should be executed only if LOG.isDebugEnabled() is 
> true, in some cases it's expensive to construct the string that is being 
> printed to log. It's much easier to always use LOG.isDebugEnabled() because 
> it's easier to check (rather than in each case reason whether it's necessary 
> or not).

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

Reply via email to