使用变量名登录Java?

时间:2013-01-07 16:15:40

标签: java debugging logging

在之前的工作中,我使用的是C ++,公司内部库有一个日志记录宏,我只需编写LOG( somevariable ),它就会输出到标准输出:

variablename variablevalue

有没有人知道在Java中是否有办法做到这一点?

我从未想过要查看他们的代码,所以我不知道它是如何完成的。这真的很有用!

4 个答案:

答案 0 :(得分:2)

如果在Intellij和Netbeans上键入 soutv + TAB ,它将为您提供可能要打印的变量列表。

enter image description here

我复制了这个并将其更改为使用记录器而不是 logv + TAB

enter image description here

答案 1 :(得分:1)

如果您使用Eclipse,您可以使用“Watch Expression”-View不仅可以监视变量,还可以监视Method调用。请参阅this

如果您只想打印变量的值,可以使用Eclipse模板。 转到Windows->Preferences并查找条目Java->Editor->Templates。添加一个新模板并将其命名为“printvar”。将以下内容添加到模板主体:

System.out.println("${variable} = "+ ${variable});

在编码期间键入printvar,然后按 CTRL + Space 将使用${variable}生成输入的代码作为变量名称的占位符。您只需输入一次变量名称,这样可以节省时间和输入。

BTW:你可以在C ++中创建允许像LOG(variable_name)这样的语法糖的宏,因为C ++有一个预处理器:Java没有。有一些Java预处理器的实现,但我认为使用一个这样的简单问题需要付出太多努力,例如打印变量的名称后跟其值。

答案 2 :(得分:0)

典型的技术是使用log4j或logback等。也许是由slf4j调解的。这通常需要每个类的静态变量,这反过来会使日志消息告诉您它们的来源。

答案 3 :(得分:0)

你在java中没有MACRO,但你可以在某些类上使用静态方法做这样的事情..没有变量名但是有类类型。

class DebugUtil
{
  public void static LOG(Object obj)
  {
    LOG(System.out, obj.getClass().getName(), obj);
  }

  public void static LOG(String name, Object obj)
  {
    LOG(System.out, name, obj);
  }

  public void static LOG(PrintStream ps, String name, Object obj)
  {
    ps.println(name + ":" + obj);
  }
}

然后用于

String foo = "bar";
Debug.Util.LOG(foo);
Debug.Util.LOG("foo", foo);