2012-07-03 7 views
5

Ich versuchte dies:Wie Debuggen/Loggen wsgi Python App?

#!/usr/bin/python  

from wsgiref.simple_server import make_server 
from cgi import parse_qs, escape 
import logging 
import os 
import sys 

html = """ 
<html> 
<body> 
    <form method="post" action="parsing_post.wsgi"> 
     <p> 
     Age: <input type="text" name="age"> 
     </p> 
     <p> 
     Hobbies: 
     <input name="hobbies" type="checkbox" value="software"> Software 
     <input name="hobbies" type="checkbox" value="tunning"> Auto Tunning 
     </p> 
     <p> 
     <input type="submit" value="Submit"> 
     </p> 
     </form> 
    <p> 
     Age: %s<br> 
     Hobbies: %s 
     </p> 
    </body> 
</html> 
""" 

def application(environ, start_response): 

    # the environment variable CONTENT_LENGTH may be empty or missing 
    try: 
     request_body_size = int(environ.get('CONTENT_LENGTH', 0)) 
    except (ValueError): 
     request_body_size = 0 

    # When the method is POST the query string will be sent 
    # in the HTTP request body which is passed by the WSGI server 
    # in the file like wsgi.input environment variable. 
    logger = logging.getLogger(__name__) 
    request_body = environ['wsgi.input'].read(request_body_size) 
    d = parse_qs(request_body) 


    age = d.get('age', [''])[0] # Returns the first age value. 
    hobbies = d.get('hobbies', []) # Returns a list of hobbies. 

    # Always escape user input to avoid script injection 
    age = escape(age) 
    hobbies = [escape(hobby) for hobby in hobbies] 

    response_body = html % (age or 'Empty', 
       ', '.join(hobbies or ['No Hobbies'])) 

    status = '200 OK' 

    response_headers = [('Content-Type', 'text/html'), 
        ('Content-Length', str(len(response_body)))] 
    start_response(status, response_headers) 

    return [response_body] 

Aber ich weiß nicht, wo es protokolliert. Ich versuche, den Wert auf der Webseite oder in einer Datei /var/log/apache2/myapp.log anzuzeigen/zu protokollieren

Was ist der beste Weg, dies zu tun?

Jede Antwort wird sehr geschätzt. Danke in fortgeschrittenem.

+0

Siehe https://code.google.com/p/modwsgi/wiki/DebuggingTechniques –

Antwort

3

Beachten Sie, dass der obige Code nicht wirklich irgendein Protokoll erzeugen wird, da Sie keine der logger.log() Varianten aufrufen - aber ich denke, das ist nicht der Punkt.

Wenn Sie Ihren Code mit apache/mod_wsgi ausführen, besteht die einfachste Lösung darin, Ihre Logger so zu konfigurieren, dass sie sich mit einem StreamHandler bei sys.stderr anmelden (cf http://docs.python.org/howto/logging.html#configuring-logging) und Pfad und Name des Fehlerprotokolls definieren level in Ihrem apache conf (Vorsicht, das Verhalten des Apache-Standardverhaltens besteht darin, nur die Fehlermeldung "error level" zu protokollieren).

+2

Und https://code.google.com/p/modwsgi/wiki/DebuggingTechniques zeigt Ihnen, wie Sie den Protokolliergrad erhöhen. –