G
Gast
Gast
geht sowas wie
#if Debug (C#)
in JAVA?
danke & LG
#if Debug (C#)
in JAVA?
danke & LG
if (Options.getDebug() ) System.out.println(....);
for (int i=0; i<10000000; i++)
{
// In der innersten Schleife, wird gaaaanz oft ausgeführt:
log(level, "Das Objekt ist "+einKomplexesObjektDessenToStringMethodeZehnMinutenRechnet);
}
private static final boolean LOCAL_BEDUG = false;
...
if (LOCAL_DEBUG) log(level, "Das Objekt ist "+einKomplexesObjektDessenToStringMethodeZehnMinutenRechnet);
Um die Log-Level zu berücksichtigen, kann man dann besser mit org.apache.log4j.Logger.isEnabledFor bzw. java.util.logging.Logger.isLoggable arbeiten:Marco13 hat gesagt.:Selbst wenn das logLevel besagt, dass garnichts ausgegeben wird, wird trotzdem der String gebaut.... :?
Abhilfe sind da ggf. solche sachen wie
allerdings werden damit die LogLevel auch ad absurdum geführt....Code:private static final boolean LOCAL_BEDUG = false; ... if (LOCAL_DEBUG) log(level, "Das Objekt ist "+einKomplexesObjektDessenToStringMethodeZehnMinutenRechnet);
if (log.isEnabledFor( level)) log(level, "Das Objekt ist "+einKomplexesObjektDessenToStringMethodeZehnMinutenRechnet);
Murray hat gesagt.:Die Variante mit der static final Konstante hat allerdings theoretisch den Vorteil, dass ein optimierender Compiler die gesamte Anweisung aus dem Code entfernen kann.
Murray hat gesagt.:Die Variante mit der static final Konstante hat allerdings theoretisch den Vorteil, dass ein optimierender Compiler die gesamte Anweisung aus dem Code entfernen kann.
if (false) {
throw new InternalError();
}
public static boolean DEBUG = false;
void foo() {
if (DEBUG) {
throw new InternalError();
}
}
public interface Debug {
static boolean DEBUG = false;
}
public class Test {
void foo() {
if (Debug.DEBUG) {
throw new InternalError();
}
}
}
Da gebe ich Dir Recht; die "static final"-Konstante würde auch auch nur dort benutzen, wo der Code - wie in Deinem Fall - aus Sicherheitsgründen nicht in der ausgelieferten Version enthalten sein soll oder sich beim Profilen zweifelsfrei erwiesen hat, dass die Abfrage über das Log-Framework wirklich signifikante Performance-Nachteile bringt.Ebenius hat gesagt.:Im Regelfall sollte man darauf verzichten, und lieber die entsprechenden Methoden des Log-Frameworks (oder notfalls Systemvariablen) benutzen.
if ( testModus()) {
/* mache etwas */
}
if ( testModus()) {
/* mache etwas */
} else {
/* mache etwas anderes */
}
Darauf wollte ich mit meinem LOCAL_DEBUG hinaus. Wobei ich nicht weiß, wie Log4J das isDebugEnabled intern umsetzt.Murray hat gesagt.:Die Variante mit der static final Konstante hat allerdings theoretisch den Vorteil, dass ein optimierender Compiler die gesamte Anweisung aus dem Code entfernen kann.
Gast hat gesagt.:ihr wisst hoffentlich was mit #if debug gemeint ist ^^