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
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.
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.
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.
Vermeiden Sie CFTRACE mit allen möglichen Mitteln! Es verschraubt Remote-Anrufe, WSDLS, Coldfire und ich kann mich nicht einmal erinnern, was sonst noch ... –
Ich nehme an, wenn es eingeschaltet ist?Aber das Debuggen im Allgemeinen erzeugt dieses Problem ... Können Sie das genauer erklären? – orangepips
Sie können die Funktion IsDebugMode() verwenden, die true zurückgibt, wenn ColdFusion-Debugging aktiviert ist, und false, wenn es deaktiviert ist.
Dies ist der Ansatz, den ich persönlich verwenden würde, obwohl die in einer anderen Antwort vorgeschlagene anwendungsbezogene Variable auch funktionieren würde. –
- 1. Gibt es eine Möglichkeit, Bluetooth und/oder Wifi programmgesteuert in iOS ein- und auszuschalten?
- 2. Gibt es eine Möglichkeit, reloadOnSearch in einem Controller bedingt auszuschalten?
- 3. Gibt es eine Möglichkeit, eine BizTalk-Empfangsadresse durch Code ein- oder auszuschalten?
- 4. Gibt es eine Möglichkeit, jquery noconflict Modus in Wordpress auszuschalten?
- 5. Gibt es eine Möglichkeit, Wifi in iOS programmatisch ein- und auszuschalten?
- 6. Gibt es eine C++ Funktion, um den Computer auszuschalten?
- 7. Gibt es eine Möglichkeit, den in Python geschriebenen Gtk/GLib-Code zu testen?
- 8. Gibt es eine Möglichkeit, eine SQLAlchemy Connection zu testen?
- 9. Gibt es eine Möglichkeit, eine Variable für "isForEachable" zu testen?
- 10. Gibt es eine elegante Möglichkeit zu testen, ob eine Instanzmethode ein Alias für eine andere ist?
- 11. Gibt es eine andere Möglichkeit, Enum-Bitfelder zu testen?
- 12. Gibt es eine Möglichkeit zum Scrollen in einem WPF ScrollViewer?
- 13. Gibt es ein AssertEquals zum Testen von XML-Dateien?
- 14. Welche Tools gibt es zum Testen von Multithread-.NET-Code?
- 15. Gibt es eine clevere Möglichkeit, Unit AspectJ Richtlinienerzwingungsaspekte zu testen?
- 16. Gibt es eine Möglichkeit, eine Spalte zu ändern, um 'NOT NULL' auszuschalten?
- 17. Gibt es eine einfache Möglichkeit, Openshift Autoscaling zu testen?
- 18. Gibt es eine Möglichkeit zum Bereitstellen einzelner Bericht in SSRS
- 19. Gibt es eine Möglichkeit, eine laufende Android-App an jemanden zum Testen zu senden?
- 20. Gibt es eine Möglichkeit, herauszufinden, welcher Code eine Assembly verwendet?
- 21. Gibt es eine bessere Möglichkeit, diesen Python-Code zu machen?
- 22. Gibt es eine Möglichkeit, CSS zu testen: den Mauszeiger in IE Developer Tools?
- 23. Gibt es eine schnelle Möglichkeit, den Code einer in der Scala-Konsole deklarierten Methode anzuzeigen?
- 24. Gibt es eine Möglichkeit, absichtlich alle Anti-Aliasing für UIView auszuschalten?
- 25. Gibt es eine Möglichkeit zum Ändern der Zeichnungsreihenfolge in WPF
- 26. Gibt es ein Java-Paket zum Testen von RESTful-APIs?
- 27. Gibt es eine Möglichkeit, den Python-Code für invision-v3 in TensorFlow zu ändern?
- 28. Gibt es eine Möglichkeit, Code manuell in Eclipse zu falten?
- 29. Gibt es ein Werkzeug zum Erkunden/Testen von COM-Objekten?
- 30. Gibt es eine Möglichkeit, den aktuellen Dateinamen in FORTRAN 77
Ich denke, das ist eine gute Idee, aber ich würde den cfif und cflog Aufruf innerhalb eines CFC stattdessen umhüllen. – orangepips
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. –
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. –