Deutsche Zope User Group
Gast 1 Benutzer online
DZUG-News

Tips und Tricks zum debuggen (Fehlersuche und -behebung) in Zope.

Einstellungen beim Start von Zope:

Dazu k�nnen einige Umgebungsvariablen gesetzt werden. Hierzu der folgende Abschnitt �bers debuggen und loggen aus ZOPEHOME/doc/ENVIRONMENT.txt

Debugging and Logging

Einige der folgenden Variablen sind doppelt ausgepr�gt, dabei ist jeweils EVENTLOG... die aktuellere. STUPIDLOG... ist die veraltete Version.

EVENT_LOG_FORMAT oder STUPID_LOG_FORMAT

Anpassen des Ausgabeformats des EventLogger?-s;

EVENT_LOG_FILE="path" oder STUPID_LOG_FILE="path"

Der EventLogger? schreibt Zope Log-Informationen in eine Datei. Er tut dies auf nicht sehr clevere Art und das Format ist nicht besonders konfigurierbar - daher der Name STUPID_LOG_FILE.

Siehe auch: LOGGING.txt

EVENT_LOG_SEVERITY oder STUPID_LOG_SEVERITY

Wenn diese Variable gesetzt ist, loggt Zope nur Messages, deren SeverityLevel? (Dringlichkeitsstufe) h�her ist als die in der in EVENT_LOG_SEVERITY angegeben.

ZSYSLOG="/dev/log"

Diese Umgebungsvariabel veranlasst Zope den EventLog? in den benannten UNIX DomainSocket? (gew�hnlich /dev/log) zu schreiben. Dies gilt nur f�r UNIX.

Siehe auch: LOGGING.txt

ZSYSLOG_FACILITY="facilityname"

Zope nutzt den SyslogLogger? mit der angegebenen facility. Diese UmgebungsVariable? ist optional und �berschreibt die default facility "user". Dies gilt nur f�r UNIX.

ZSYSLOG_SERVER="machine.name:port"

Dies veranla�t Zope den UDP socket mit machine.name (Name oder IP-Adresse) auf port (mu� ein integer sein) zu verbinden. Der default syslog port ist 514, aber es ist besser einen Port anzugeben, da Zope keinen normalen default port w�hlt. Dies kann sich �ndern, es ist angeraten, hier in Zukunft wieder reinzuschauen.

See also: LOGGING.txt

Weitere Variablen:

  • ZSYSLOG_ACCESS="/dev/log"
  • ZSYSLOG_ACCESS_FACILITY="facilityname"
  • ZSYSLOG_ACCESS_SERVER="machine.name:port"
    • Wie ZSYSLOG, ZSYSLOG_FACILITY und ZSYSLOG_SERVER, jedoch kontrolliert es das Senden von Informationen zum syslog (statt event log).
  • Z_DEBUG_MODE "yes" or "no"
  • BOBO_DEBUG_MODE "yes" or "no" (nicht mehr aktuell)
    • Zope l�uft im DebugMode?. Dies ist dasselbe wie die Option -D in z2.py


Anpassen der Start-Datei start (orginal von Zope-2.6.1)

ZOPEHOME/start:

  ZLOGFILE=$EVENT_LOG_FILE
  if [ -z "$ZLOGFILE" ]; then
          ZLOGFILE=$STUPID_LOG_FILE
  fi
  if [ -z "$ZLOGFILE" ]; then
          EVENT_LOG_FILE=""
          export EVENT_LOG_FILE
  fi

  # for debugging
  export PROFILE_PUBLISHER="/usr/local/zope/var/profile.out"      # aktiviert profiling
  export EVENT_LOG_FILE="/usr/local/zope/var/event.log"           # event-log Datei
  export EVENT_LOG_SEVERITY='-300'                                # Schwellwert f�r Dringlichkeit der Meldung

  exec /usr/local/bin/python $cwd/z2.py -D -u user "$@"


Weitere Debugging-Vorgehensweisen:

Im ZMI unter root -> [Control_Panel]? -> DebugInfo? gibts weitere Informationen. Hier finden sich zwei Reiter DebugInfo und Profiling

DebugInfo?:

  • Versionsnummern von Zope, Python, Betriebssystem
  • Pfadangaben von SOFTWARE_HOME, INSTANCE_HOME, CLIENT_HOME, sys.path (Python-Source)
  • ProzessID?, Laufzeit
  • TopRefcounts? (Was ist das? Erkl�rung gesucht! - FloK)
  • Cache details, Connections
  • Refresh: Hier kann man einstellen da� und wie oft sich Zope "refresht", dabei werden �nderungen an Produkten �bernommen.

Profiling

  • Wenn beim Start von Zope die Umgebunsvariable PROFILE_PUBLISHER gesetzt ist, dann werden in diesen Tab Informationen �ber die Laufzeiten aller durchlaufenen Methoden angezeigt und beim Beenden bzw. Neustarten des Prozesses ein Bericht als Datei abgesetzt. (AFAIK ab 2.6)


[zLOG]?

Dies ist ein Modul zum event loggen, da� bei Zope regul�r dabei ist. Es kann benutzt werden um sich Variablenwerte bzw. Objekte loggen zu lassen. Hierzu an der gew�nschten Stelle im Code den Aufruf 'LOG(Beschreibung/Name/Ort, SeverityLevel?, variable/objekt) einsetzen und am Beginn des Moduls from zLOG import LOG unterbringen. Der Wert der Umgebungsvariable EVENT_LOG_SEVERITY und das angegebene SeverityLevel? hat Einflu� darauf wieviel Informationen ausgegeben werden.


Debugging von der Kommandozeile:

Hier zu m�ssen die Zope-sourcen st�ndig im Interpreter verf�gbar gemacht werden. Damit dies nichtr jedesmal neu eingetippt werden mu�, hier ein kleines script, genannt zopeinit.py, es kommt in das Hauptverzeichnis der aktuellen Python-Installation (z.B. /usr/local/lib/python/) :

  #! /usr/local/bin/python
  # appending the zope source dir to the python path
  import sys
  sys.path.append('/usr/local/zope/lib/python')
  import ZODB
  import ZPublisher

Im Interpreter gibt man dann jeweils nur noch import zopeinit ein und kann dann sofort alle Zope-Module ansprechen.


Weitere Moeglichkeiten:

  • [pdb]? - Debugger f�r Python, eine gute Anleitung ist auf im ZopeBuch Kapitel Testing and Debugging und hier ist die Orginal-Doku
  • VerboseSecurity? - Ein Produkt f�r alle Arten von Zugriffs-Problemen und RechteManagement?.
  • [ZEO]? - Sehr komfortables debuggen ist mit dem ZopeEnterpriseObject? m�glich, da man hier einen Client nutzen kann um den Server detailliert zu �berwachen.


Quellen und weiterfuehrende Links:


Viel Erfolg bei der Fehlersuche!


Kommentare und Erg�nzungen:

  • http://www.zopelabs.com/cookbook/1034779450 - Here is some code that you can use to envoke pdb, the built-in Python command-line debugger at precisely the point where any exception is raised in anything in the try clause of the try: except: statmement.