以前の仕事で、私は C++ で作業していました。会社の内部ライブラリには、単純に LOG( somevariable ) を記述できるロギング マクロがあり、標準出力に出力されました。
"変数名:変数値"
Javaでこれを行う方法があるかどうか誰かが知っていますか?
私は彼らのコードを見るとは思っていなかったので、それがどのように行われたのかわかりません。それは本当に役に立ちました!
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 プリプロセッサの実装はありますが、変数名の後にその値を出力するような単純な問題を処理するには、それを使用するのは大変だと思います。
soutv + TABIntellij と Netbeans と入力すると、出力したい変数のリストが表示されます。
これをコピーして、代わりにロガーを使用するように変更しましたlogv + TAB
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);
典型的な手法は、log4j や logback などを使用することです。おそらくslf4jによって媒介されます。これには、通常、クラスごとに静的変数が必要であり、これにより、ログ メッセージがどこから来たのかがわかります。