diff --git a/examples/log_app.ini b/examples/log_app.ini new file mode 100644 index 00000000..79b7ac2d --- /dev/null +++ b/examples/log_app.ini @@ -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 diff --git a/examples/log_app.py b/examples/log_app.py new file mode 100644 index 00000000..271be3d9 --- /dev/null +++ b/examples/log_app.py @@ -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"] diff --git a/gunicorn/app/pasterapp.py b/gunicorn/app/pasterapp.py index 14eedd66..62474b45 100644 --- a/gunicorn/app/pasterapp.py +++ b/gunicorn/app/pasterapp.py @@ -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):