Javaでデバッグメッセージをログに記録するさまざまな方法について少し読んだことがあります.Cの背景から来て、私の懸念は次のとおりです。
これらのライブラリは、ロギングが無効になっている場合 (実稼働環境など) に最小限のオーバーヘッドを要求しますが、それらのlog()
関数への引数は引き続き評価されるため、現実のシナリオでのオーバーヘッドは実際にはまったく無視できないという懸念があります。
たとえば、ログ関数自体が何もしない場合でも、 alog(myobject.toString(), "info message")
には を評価するオーバーヘッドがまだありますmyobject.toString()
。これはかなり大きくなる可能性があります。
誰もこの問題の解決策を持っていますか?
PS: C のバックグラウンドについて言及した理由を知りたい人のために: C では、プリプロセッサ マクロとコンパイル時の命令を使用できます。これにより、コンパイル時のデバッグに関連するすべてのコードが完全に削除されます (マクロのパラメーターはまったく表示されません)。
編集: 回答の最初のバッチを読んだ後、Java には明らかにそのトリックを実行するものがないようです (CPU のすべてのビットが重要なモバイル環境で大きなループで数値の余弦をログに記録することを考えてください)。そのため、IDE ベースのソリューションを使用することもあると付け加えておきます。私の最後の手段は、「すべてを検索/置換」マクロのようなものを構築することです。私は最初、アスペクト指向のフレームワークから得た何かが役立つのではないかと考えました...誰か?