2010-10-30 47 views
5

我遇到了日誌記錄問題。我正在運行CherryPy 3.2,我一直在閱讀文檔here,但沒有找到任何有關如何配置本地日誌文件以輸出和如何寫入的示例。CherryPy日誌記錄:如何配置和使用全局和應用程序級記錄器?

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) 

更新:這是我結束了持續的代碼塊。



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) 

回答

10

簡化了一下:

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() 

如果您每天不同的日誌,使用RotatingFileHandler截至http://www.cherrypy.org/wiki/Logging#CustomHandlers描述我想你錯過了最重要的一點是,你應該與應用程序有關淤泥.log只有你已經實例化你的應用程序(例如通過tree.mount(),如上),但之前 engine.start。也就是說,錯誤日誌:

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() 

希望幫助...

相關問題