5

以前の仕事で、私は C++ で作業していました。会社の内部ライブラリには、単純に LOG( somevariable ) を記述できるロギング マクロがあり、標準出力に出力されました。

"変数名:変数値"

Javaでこれを行う方法があるかどうか誰かが知っていますか?

私は彼らのコードを見るとは思っていなかったので、それがどのように行われたのかわかりません。それは本当に役に立ちました!

4

4 に答える 4

2

Eclipse を使用している場合は、"Watch Expression" ビューを使用して、変数だけでなくメソッド呼び出しも監視できます。これを参照してください。

変数の値を出力するだけの場合は、Eclipse テンプレートを使用できます。に移動しWindows->Preferencesてエントリを探しますJava->Editor->Templates。新しいテンプレートを追加して、たとえば「printvar」と呼びます。テンプレートの本文に次を追加します。

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

コーディング中に入力printvarしてから押すと、変数名のプレースホルダーとしてCTRL+Space使用して、入力したコードが生成されます。${variable}変数名を 1 回だけ入力する必要があるため、時間と入力の手間が省けます。

ところで: C++ で LOG(variable_name) のようなシンタックス シュガーを許可するマクロを作成できる理由は、C++ にはプリプロセッサがあり、Java にはプリプロセッサがないためです。Java プリプロセッサの実装はありますが、変数名の後にその値を出力するような単純な問題を処理するには、それを使用するのは大変だと思います。

于 2013-01-07T16:17:25.360 に答える
2

soutv + TABIntellij と Netbeans と入力すると、出力したい変数のリストが表示されます。

ここに画像の説明を入力

これをコピーして、代わりにロガーを使用するように変更しましたlogv + TAB

ここに画像の説明を入力

于 2013-01-07T16:21:18.990 に答える
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);
于 2013-01-07T16:38:25.127 に答える
0

典型的な手法は、log4j や logback などを使用することです。おそらくslf4jによって媒介されます。これには、通常、クラスごとに静的変数が必要であり、これにより、ログ メッセージがどこから来たのかがわかります。

于 2013-01-07T16:25:52.617 に答える