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

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

> LOG.debug("a=" + a + ", b=" + b + ", c=" + c);

The way you'd write this is:

LOG.debug("a={} b={} c={}", a, b, c);

This need not be a varargs call, but can a normal, 4-arg method call.

That said, numeric values would get boxed.  In the attached patch there are 
some calls that pass a single numeric value that would get boxed.  If we're 
concerned about the performance cost of the boxing in these cases, then we 
could define methods like:

public static void debug(String format, int i) {  if (log.isDebugEnabled())  
log.debug(format, i); }
public static void debug(String format, long l) {  if (log.isDebugEnabled())  
log.debug(format, l); }
public static void debug(String format, float f) {  if (log.isDebugEnabled())  
log.debug(format, f); }
public static void debug(String format, double d) {  if (log.isDebugEnabled())  
log.debug(format, d); }

If benchmarks show this to be a significant optimization, this might argue for 
creating a Hadoop-specific logging wrapper, as slf4j does not make this 
optimization.

Here's a random idea: use assertions for logging!  So folks could write:
  assert LOG.debug(....);
where LOG.debug() would need to return 'true'.


    

> 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