java 同一文件中的同一行和不同行中的多个日志记录

Multiple loggings in the same line as well as in different lines in same file in java

我刚开始使用 Log4j 记录器,我想打印一些日志语句到 在同一行。

示例:

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");
}

在主要方法中

进入第一个函数

您可以使用 String.format(String, Object...) and a pair of ternaries。像,

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

没有像

这样的三元组
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);
}

正确的 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);