mar*_*aff 8 python error-logging wsgi passenger
尽管使用谷歌搜索和阅读文档,我还是试图让 Python 日志记录工具正常工作,但没有成功。这是Dreamhost 共享服务器上Passenger 中的WSGI Python 应用程序。Paste 中间件正在努力提供有关 500 错误的信息。运行此代码时没有 python 错误。
我的消毒代码(passenger_wsgi.py):
#!/usr/bin/python
import os
import sys
import logging
cwd = os.getcwd()
sys.path.insert(0,cwd)
sys.path.append(cwd)
from paste.exceptions.errormiddleware import ErrorMiddleware
# configure the logging
logfilename = os.path.join('<path>/passenger_wsgi.log')
logging.basicConfig(filename=logfilename, level=logging.DEBUG, filemode='a+', format='%(asctime)s %(levelname)s %(message)s')
logging.info("Running %s", sys.executable)
log = file('<path>/passenger_wsgi_2.log', 'a')
print >>log, "Running %s" % (sys.executable)
log.flush()
application = ''
def application(environ, start_response):
results = ''
logging.info("Application called:")
logging.info("environ: %s", str(environ))
print >>log, "Application called:"
log.flush()
status = '200 OK'
results = 'Hello World! Running Python version ' + sys.version + '\n\n'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(results)))]
# to test paste's error catching prowess, uncomment the following line
#raise("error")
start_response(status, response_headers)
return results
# load the application within Paste's error middleware
application = ErrorMiddleware(application, debug=True)
Run Code Online (Sandbox Code Playgroud)
print >>log无论是从命令行运行还是响应 http 请求运行时,这些语句都按预期工作。第一条logging.info语句在从命令行运行时起作用(当然,其他logging.info语句永远不会从命令行被命中)。但是,当运行响应 HTTP 请求时,所有logging.info语句都不起作用。
当我在这里说“工作”时,我的意思是“将语句写入日志文件”。如果可以使其工作,我更愿意使用日志记录工具而不是打印语句。
在此先感谢您帮助我理解并解决此问题。
小智 1
为后代回答,因为我最近遇到了同样的问题。
看起来默认记录器在 dreamhost 乘客环境中不起作用。我让它与此一起工作(摘自https://gist.github.com/jhamrick/044c3607979eea2123ae):
import logging
from logging.handlers import RotatingFileHandler
logfilename = os.path.join(os.environ['HOME'], 'logs', 'passenger_wsgi.log')
logformat = "[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s"
loglevel = logging.INFO
handler = RotatingFileHandler(logfilename, maxBytes=1048576, backupCount=5)
handler.setLevel(loglevel)
handler.setFormatter(logging.Formatter(logformat))
logging.basicConfig(filename=logfilename, format=logformat, level=loglevel)
logger = logging.getLogger("passenger_wsgi")
logger.addHandler(handler)
logger.setLevel(loglevel)
logger.debug("Starting application")
Run Code Online (Sandbox Code Playgroud)
从内部路由使用记录器也可以。希望这可以帮助遇到此问题的其他人!
| 归档时间: |
|
| 查看次数: |
873 次 |
| 最近记录: |