2010-10-30 5 views
5

Ich habe Probleme mit der Protokollierung. Ich verwende CherryPy 3.2 und habe die Dokumente here durchgelesen, habe aber keine Beispiele gefunden, wie man eine lokale Protokolldatei für die Ausgabe konfiguriert und wie man darauf schreibt.CherryPy Logging: Wie konfiguriere und verwende ich die globalen und Anwendungsebenen-Logger?

Raspberry.py:


import socket 
import sys 
import cherrypy 

app_roots = { 
       # Sean's laptop dev environment. 
       "mylaptop": "/home/src/local-mydomain.com/py", 

       # Hosted dev environment. 
       "mydomain.com" : "/home/dev/src/py" 
      } 


hostname = socket.gethostname() 
CherryPyLog = cherrypy.tree.mount().log 

if hostname not in app_roots: 
    CherryPyLog("The following hostname does not have an app_root entry in raspberry.py. Exiting early.") 
    sys.exit() 

sys.stdout = sys.stderr 
sys.path.append(app_roots[hostname]) 

import os 
os.chdir(app_root) 

# Setup for raspberry application logging. 
import datetime 
today = datetime.datetime.today() 
log.access_file = "{0}/{1}.raspberry.access.log".format(app_roots[hostname],today.strftime("%Y%m%d-%H%M")) 
log.error_file = "{0}/{1}.raspberry.error.log".format(app_roots[hostname],today.strftime("%Y%m%d-%H%M")) 

#Testing logger 
log("{0} -- Logger configured".format(today.strftime("%Y%m%d-%H%M%S"))) 

import atexit 
cherrypy.config.update({'environment': 'embedded'}) 

if cherrypy.__version__.startswith('3.0') and cherrypy.engine.state == 0: 
    cherrypy.engine.start(blocking = False) 
    atexit.register(cherrypy.engine.stop) 

from web.controllers.root import RaspberryRequestHandler 

application = cherrypy.Application(RaspberryRequestHandler(), script_name = None, config = None) 

UPDATE: Hier ist der Code-Block, den ich mit dem Gehen endete.



app_roots = { 
       # Sean's laptop dev environment. 
       "mylaptop": "/home/src/local-plottools.com/py", 

       # Hosted dev environment. 
       "myDomain" : "/home/dev/src/py" 
      } 

import socket 
hostname = socket.gethostname() 

import cherrypy 
import sys 
if hostname not in app_roots: 
    cherrypy.log("The hostname {0} does not have an app_root entry in {1}. Exiting early.".format(hostname,__file__)) 
    sys.exit() 

sys.stdout = sys.stderr 
sys.path.append(app_roots[hostname]) 

import os 
os.chdir(app_roots[hostname]) 

from web.controllers.root import RaspberryRequestHandler 

cherrypy.config.update({ 
    'log.access_file': "{0}/cherrypy-access.log".format(app_roots[hostname]), 
    'log.error_file': "{0}/cherrypy.log".format(app_roots[hostname]), 
    "server.thread_pool" : 10 
}) 

# special case, handling debug sessions when quickstart is needed. 
if __name__ == "__main__": 

    cherrypy.config.update({ 
           'log.screen': True, 
           "server.socket_port": 8000 
          }) 
    cherrypy.quickstart(RaspberryRequestHandler()) 
    sys.exit() 

# This configuration is needed for running under mod_wsgi. See here: http://tools.cherrypy.org/wiki/ModWSGI  
cherrypy.config.update({'environment': 'embedded'}) 

applicationLogName = "{0}/raspberry.log".format(app_roots[hostname]) 

from logging import handlers 
applicationLogFileHandler = handlers.RotatingFileHandler(applicationLogName, 'a', 10000000, 1000) 

import logging 
applicationLogFileHandler.setLevel(logging.DEBUG) 

from cherrypy import _cplogging 
applicationLogFileHandler.setFormatter(_cplogging.logfmt) 

cherrypy.log.error_log.addHandler(applicationLogFileHandler) 

application = cherrypy.Application(RaspberryRequestHandler(), None) 

Antwort

10

Vereinfachen ein bisschen:

import os 
import socket 
import sys 

import cherrypy 

app_roots = { 
       # Sean's laptop dev environment. 
       "mylaptop": "/home/src/local-mydomain.com/py", 

       # Hosted dev environment. 
       "mydomain.com" : "/home/dev/src/py" 
      } 


hostname = socket.gethostname() 
if hostname not in app_roots: 
    cherrypy.log("The hostname %r does not have an app_root entry in " 
       "raspberry.py. Exiting early." % hostname) 
    sys.exit() 

sys.path.append(app_roots[hostname]) 
os.chdir(app_root) 

cherrypy.config.update({ 
    'environment': 'embedded', 
    'log.access_file': "{0}/raspberry.access.log".format(app_roots[hostname]), 
    'log.error_file': "{0}/raspberry.error.log".format(app_roots[hostname]), 
    }) 

from web.controllers.root import RaspberryRequestHandler 
application = cherrypy.tree.mount(RaspberryRequestHandler(), '/') 
# Insert log changes here 
cherrypy.engine.start() 

Wenn Sie pro Tag verschiedene Protokolle, verwenden Sie einen RotatingFileHandler wie bei http://www.cherrypy.org/wiki/Logging#CustomHandlers Der wichtige Punkt beschrieben Ich glaube, Sie fehlt, dass Sie mit App verarschen sollte .log nur nach haben Sie Ihre App instanziiert (zB über tree.mount(), wie oben), aber vor engine.start. Das heißt, für das Fehlerprotokoll:

application = cherrypy.tree.mount(RaspberryRequestHandler(), '/') 

log = application.log 
log.error_file = "" 

# Make a new RotatingFileHandler for the error log. 
fname = "{0}/raspberry.error.log".format(app_roots[hostname]) 
h = handlers.RotatingFileHandler(fname, 'a', 10000000, 1000) 
h.setLevel(DEBUG) 
h.setFormatter(_cplogging.logfmt) 
log.error_log.addHandler(h) 

cherrypy.engine.start() 

Hoffnung, das hilft ...

Verwandte Themen