削除方法は、デバッグからプロダクションコードでJava
-
09-06-2019 - |
質問
することは可能でコンパイラーを削除算用のデバッグ目的などをロギングから生産コードについて教えてください。デバッグ結ばで目印になるか、その国のアノテーションを用.
する定性(debug=trueのアイコンをクリックで各デバッグ計算書での削減が可能です。れていただければと思いまのコンパイラはそのデバッグ諸表に消える。
解決
二つの提言しています。
初: リアルログイン、現代のロギングパッケージのようなlog4jはjavaの内蔵にログイン.気にしない性能で、ロギングレベルチェックが言えます。(この整数型の比)
している場合には以上は、シングル、ガードの全体ブロック:
(log4jは、例えば:)
if (logger.isDebugEnabled()) {
// perform expensive operations
// build string to log
logger.debug("....");
}
これにより、追加力制御のログインを行います。を再起動、実行、デバッグを構築できる非常に不便です。
第二:
簡 主張 ています。主張は当に評価し、結果をbooleanで、オプションのメッセージ:
assert (sky.state != FALLING) : "The sky is falling!";
いつの主張の結果、虚偽の主張の場としてAssertionErrorがスローされますを含むメッセージ(このチェック例外として、アプリケーションを終了).
のっことは、これらの処理特別のJVMできるライブ壁紙に可愛く動く子犬実行時のクラスのレベルは、VMのパラメータ(なし再コンパイル)を行います。いない場合に有効であゼロオーバーヘッド。
他のヒント
public abstract class Config
{
public static final boolean ENABLELOGGING = true;
}
import static Config.*;
public class MyClass
{
public myMethod()
{
System.out.println("Hello, non-logging world");
if (ENABLELOGGING)
{
log("Hello, logging world.");
}
}
}
のコンパイラのコードブロック"こんにちは、ロギングの世界"ですがENABLE_LOGGINGはtrueに設定で静最終値とします。をご利用の場合はobfuscatorなどproguardは、コンフィグのクラスは消えます。
るobfuscatorもよいことではなく:
public class MyClass
{
public myMethod()
{
System.out.println("Hello, non-logging world");
Log.log("Hello, logging world.");
}
}
import static Config.*;
public abstract class Log
{
public static void log(String s)
{
if (ENABLELOGGING)
{
log(s);
}
}
}
ソログの#logいるものではないのコンパイラ、および除去することにより、のobfuscatorとともに、通話する方法とともにログクラス自体は削除されます。
もうひとつの可能性は、if文の内のロギング機能は、以下のコードすが、費用の一部追加機能。
私も大ファンの完全に除去し、デバッグ用コードです。再生産かを必要とするデバッグメッセージが何かが間違っています。削除されたりするので、すべてのコードレベルデバッグは、このになる可能性があります。
使用 Javaのプリプロセッサ?(google foo低もここをクリックするとそのリストのジョエルフォーラムの議論で)
Javaを含むある種のプリプロセッサ。それ APT.でのプロセスを生成します。でんなどのことは(いします。そのように使用されるようになっています。
また使用をお奨めいたします。ロギングの枠組み
の logger.IsDebugEnabled()
は必須ではないんでよかどうかのチェックシステムのデバッグレベルの前です。
利用ログの枠組みを意味する設定を行うことができロギングレベルの飛行再起動なします。
きロギングのように:
logger.error("Something bad happened")
logger.debug("Something bad happend with loads more detail")
この"トリック"のようにデバッグ諸表の消滅
public static final boolean DEBUG = false;
if (DEBUG) { //disapeared on compilation }
の ポスト 言 javac
スマートなチェックを static final boolean
を除くベースのデバッグます。(なかった個人的にはやってみ)
のための伐採、個人的にはお控えというようなコード:
if (logger.isDebugEnabled()) {
logger.debug("....");
}
realImportantWork();
ロギングのものdistractsからの realImportantWork()
.のやり方というのは:
logger.debug("....");
realImportantWork()
プラスのコンフィグを取り除いたすべてのデバッグメッセージが生します。
というの logger.isDebugEnabled()
管理は、ジョブのログのフレームワークは私の仕事です。最ロギングの枠組みの支援のような概念を"ロガー","LogLevel"..できるんですよね。
直接お答え:わかりません。
ここでは別の解決の問題:私の頭の中にある干。"デバッグ諸表"及び"生産することが可能になっている。
何が目的のデバッグの算はどこでわかりますか?ヘくのバグをユニット検査に用いています。まるで一枚のソフトウェアが正しく試作品の要領により、デバッグの記述かが互換性のために残されています。
私は強く同意できないと退任意のデバッグ諸表の生産コードです。私はベットは誰もが気試験の副作用をバーコード生産のコードです。このコードもはかることになっているのですが、いいよ。いすべての#を定義し正常に動作し、すべてのデバッグコードす。的100000ラインの前処理コードがすべてのデバッグに詰めが行ってしまったのでしょうか。
過去の実績がありますし、別の定義生産コードのすべてのデバッグ諸表の後にコードが試行います。