add support for logging configuration in paster ini-files

This commit is contained in:
Oliver Tonnhofer 2010-10-18 20:02:17 +02:00 committed by benoitc
parent fce191c0db
commit d546d490e5
3 changed files with 64 additions and 0 deletions

30
examples/log_app.ini Normal file
View File

@ -0,0 +1,30 @@
[app:main]
paste.app_factory = log_app:app_factory
[server:main]
use = egg:gunicorn#main
host = 127.0.0.1
port = 8080
[loggers]
keys=root
[handlers]
keys=console
[formatters]
keys=default
[logger_root]
level=INFO
qualname=root
handlers=console
[handler_console]
class=StreamHandler
formatter=default
args=(sys.stdout, )
[formatter_default]
format=[%(asctime)s] [%(levelname)-7s] - %(process)d:%(name)s:%(funcName)s - %(message)s

14
examples/log_app.py Normal file
View File

@ -0,0 +1,14 @@
import logging
log = logging.getLogger(__name__)
def app_factory(global_options, **local_options):
return app
def app(environ, start_response):
start_response("200 OK", [])
log.debug("Hello Debug!")
log.info("Hello Info!")
log.warn("Hello Warn!")
log.error("Hello Error!")
return ["Hello World!\n"]

View File

@ -6,6 +6,7 @@
import os
import pkg_resources
import sys
import ConfigParser
from paste.deploy import loadapp, loadwsgi
SERVER = loadwsgi.SERVER
@ -26,6 +27,7 @@ class PasterApplication(Application):
self.cfgurl = 'config:%s' % cfgfname
self.relpath = os.path.dirname(cfgfname)
self.cfgfname = cfgfname
sys.path.insert(0, self.relpath)
pkg_resources.working_set.add_entry(self.relpath)
@ -63,6 +65,24 @@ class PasterApplication(Application):
def load(self):
return loadapp(self.cfgurl, relative_to=self.relpath)
def configure_logging(self):
# from paste.script.command
parser = ConfigParser.ConfigParser()
parser.read([self.cfgfname])
if parser.has_section('loggers'):
if sys.version_info >= (2, 6):
from logging.config import fileConfig
else:
# Use our custom fileConfig -- 2.5.1's with a custom Formatter class
# and less strict whitespace (which were incorporated into 2.6's)
from paste.script.util.logging_config import fileConfig
config_file = os.path.abspath(self.cfgfname)
fileConfig(config_file, dict(__file__=config_file,
here=os.path.dirname(config_file)))
else:
super(PasterApplication, self).configure_logging()
class PasterServerApplication(Application):
def __init__(self, app, gcfg=None, host="127.0.0.1", port=None, *args, **kwargs):