2010-12-29 6 views
1

Ich habe eine Coldfusion-Website, und irgendwann haben wir ein Protokoll erstellt - wann immer eine bestimmte Art von Code ausgeführt wurde, wurde dieser Code protokolliert. Jetzt möchten wir es herausnehmen, haben aber immer noch die Möglichkeit, es wieder einzufügen. Daher planen wir, jedes Mal (es gibt wahrscheinlich Hunderte) diesen Code zu finden, der protokolliert wurde und den Logging-Code auskommentiert. Das erscheint mir ziemlich langweilig und ich frage mich, ob es eine Art gibt, Code als Testen zu markieren und ihn automatisch zu aktivieren/deaktivieren, indem man die Einstellungen an einer Stelle ändert ... Ich denke, ich habe Funktionen wie diese in anderen Sprachen gesehen. Ist das in ColdFusion möglich?Gibt es eine Möglichkeit, Code zum Testen in den Live-Code ein- und auszuschalten?

Antwort

6

Die Art, wie ich dies handhaben würde, ist durch Konfigurieren einer Art globaler Anwendungsvariable (z. B. doLogging), die Sie ein- und ausschalten können, und überprüfen Sie bei Bedarf. Wenn es auf true eingestellt ist, loggen Sie sich ein, andernfalls nicht.

Zum Beispiel in Application.cfc Sie diese Variable einrichten könnte:

<cfcomponent displayname="Application" output="false"> 


<cfset APPLICATION.doLogging= false /> 

<cffunction name="onRequestStart" access="public" output="false"> 

    <cfif structKeyExists(URL, "toggleLogging")> 
    <cfif APPLICATION.doLogging> 
    <cfset APPLICATION.doLogging = false /> 
    <cfelse> 
    <cfset APPLICATION.doLogging = true /> 
    </cfif> 

    </cfif> 

</cffunction> 

</cfcomponent> 

Und dann überprüfen Sie es, wo in Ihrem Code erforderlich:

<cfif APPLICATION.doLogging> 
    <cflog file="foo" text="bar" /> 
</cfif> 

Sie müssen jedoch Ihre vorhandenen Code ändern zu Verwenden Sie diese neue Methode, aber die Verwaltung in Zukunft wäre einfacher.

Hoffe, dass hilft!

EDIT: Variablennamen geändert, um sinnvoller zu sein, und ein Anwendungsbeispiel hinzugefügt.

+0

Ich denke, das ist eine gute Idee, aber ich würde den cfif und cflog Aufruf innerhalb eines CFC stattdessen umhüllen. – orangepips

+0

Das ist mehr oder weniger das, was ich vorschlagen würde, aber ich würde vermeiden, einen Toggle-Parameter zu verwenden. Verwenden Sie einen expliziten Ein- oder Aus-Zustand (z. B. url.doLogging = 1), damit Sie nicht verfolgen müssen, ob die Protokollierung aktiviert ist oder nicht. –

+0

Alle fairen Punkte. Die Idee ist die gleiche, aber die Implementierung könnte aufgeräumt werden. In der Realität würde ich diese Überprüfung umschließen und (möglicherweise) ein benutzerdefiniertes Tag anmelden, weil ich die Idee hasse, den Anwendungsbereich ANWENDUNG direkt in einem CFC zu referenzieren. Ich akzeptiere, dass du es weitergeben kannst, aber manchmal tief im Code kann das sehr unordentlich werden. –

1

Wenn Sie ColdFusion 9.0.1 verwenden und benutzerdefinierte Protokolle verwendet haben, können Sie die Anmeldung in diesen Protokollen stoppen, indem Sie im Administrator die Schaltfläche (Stopp) drücken. Abgesehen davon denke ich nicht, dass es eine Debug/Produktionsoption gibt, die diese bei der Bereitstellung deaktivieren könnte. Sie können massive Suche/ersetzen mit regexp in Eclipse und wrap cflog-Tag mit cfif fragend ist es Debug-Modus oder Produktionsmodus, und dass Sie in Anwendungsbereich beim Start der App festlegen können.

cflog, soweit ich weiß, log4j im Hintergrund verwendet, möglicherweise gibt es eine versteckte Möglichkeit, die Funktionen von log4j aus cfml zu verwenden.

4

Untersuchen Sie cftrace, die ein eigenes Protokoll generiert, und wird vom ColdFusion-Administrator ein- und ausgeschaltet. Wenn diese Option deaktiviert ist, ignoriert ColdFusion das Tag.

+0

Vermeiden Sie CFTRACE mit allen möglichen Mitteln! Es verschraubt Remote-Anrufe, WSDLS, Coldfire und ich kann mich nicht einmal erinnern, was sonst noch ... –

+0

Ich nehme an, wenn es eingeschaltet ist?Aber das Debuggen im Allgemeinen erzeugt dieses Problem ... Können Sie das genauer erklären? – orangepips

3

Sie können die Funktion IsDebugMode() verwenden, die true zurückgibt, wenn ColdFusion-Debugging aktiviert ist, und false, wenn es deaktiviert ist.

+0

Dies ist der Ansatz, den ich persönlich verwenden würde, obwohl die in einer anderen Antwort vorgeschlagene anwendungsbezogene Variable auch funktionieren würde. –

Verwandte Themen