2012-07-03 15 views
5

Próbowałem to:Jak debugować/rejestrować aplikację WSGI?

#!/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] 

Ale ja nie wiem, gdzie on loguje. Próbuję wyświetlić/zalogować wartość na stronie internetowej lub w pliku /var/log/apache2/myapp.log

Jaki jest najlepszy sposób na zrobienie tego?

Każda odpowiedź będzie bardzo ceniona. Dzięki zaawansowanym.

+0

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

Odpowiedz

3

Należy zauważyć, że powyższy kod w rzeczywistości nie wygeneruje żadnego dziennika, ponieważ nie wywołuje żadnego z wariantów logger.log() - ale myślę, że nie o to chodzi.

Jeśli używasz swojego kodu z apache/mod_wsgi, najprostszym rozwiązaniem jest skonfigurowanie logger (ów) do zalogowania się do sys.stderr przy użyciu StreamHandler (patrz http://docs.python.org/howto/logging.html#configuring-logging) i zdefiniowanie ścieżki dziennika błędów, nazwy i poziom w twoim apache conf (uwaga, domyślnym zachowaniem apache jest tylko rejestracja komunikatu "poziom błędu").

+2

. Https://code.google.com/p/modwsgi/wiki/DebuggingTechniques informuje o tym, jak podnieść poziom rejestrowania. –

Powiązane problemy