2016-02-02 25 views
0

我是使用Log4j日誌記錄器的新手,我想打印一些日誌語句到 是在同一行。在同一行以及在同一文件在java中的不同行中的多個日誌記錄

例:

log.debug(root.data); 
    if(root.left!=null) 
     log.debug("("+root.left.data); 
    else if(root.left==null) 
     log.debug("null"); 
    if(root.right!=null) 
     log(root.right.data+")"); 
    else if(root.right!=null) 
     log.debug("null)"); 

這將打印這樣(3,

   null) 

但我想打印這樣的(3,NULL)

但我有其他應以正常行爲打印的日誌語句

例子:

void function() 
{ 
log.debug("Entered First Function"); 
} 
public static void Main() 
{ 
log.debug("In Main Method"); 
} 

在主要方法

首先輸入功能

回答

1

你可以使用String.format(String, Object...)和一對ternaries。喜歡的東西,

log.debug(String.format("(%s, %s)", // 
     root.left == null ? "null" : root.left.data, // 
     root.right == null ? "null" : root.right.data)); 

沒有ternaries像

if (root.right == null || root.left == null) { 
    if (root.left == null) { 
     if (root.right == null) { 
      log.debug("(null, null)"); 
     } else { 
      log.debug(String.format("(null, %s)", root.right.data); 
     } 
    } else { 
     log.debug(String.format("(%s, null)", root.left.data); 
    } 
} else { 
    log.debug(String.format("(%s, %s)", root.left.data, root.right.data); 
} 
+0

這是如何不使用ternaries一個很好的例子。乍一看,該代碼不合理可讀。 – DominicEU

+1

自我評論以來,代碼已被修改。 – DominicEU

0

正確log4j的成語(1.2版本)將

if (log.isDebugEnabled()) { 
    log.debug("(" + root.left.data + "," + root.right.data + ")"); 
} 

它會正確地走空的照顧。在調試級別被禁用的情況下,該條件將防止任何性能下降。

您可能需要使用一些更現代的日誌記錄API,像SLF4J,或的logback的log4j 2.可讀性會更好:

log.debug("({},{})", root.left.data, root.right.data); 
相關問題