Quantcast
Channel: Davide Moro
Viewing all articles
Browse latest Browse all 25

Pyramid exceptions logging

$
0
0
If you want to log exceptions with Pyramid (http://www.pylonsproject.org/) you should start reading carefully the following resources:
and once enabled pyramid_exclog check your tween chain order as explained here http://pyramid-exclog.readthedocs.org/en/latest/#explicit-tween-configuration.

If you get in trouble some some reason, maybe you'll find this article helpful in some way. Depending on how you serve your application, it might happen that your .ini configuration logging settings are not considered at all.

Covered arguments in this post:

    How to configure your PasteDeploy .ini file

    In the following example I'm using the handlers.RotatingFileHandler (a python logrotate implementation), but feel free to use FileHandler (without handlers.).
    You can configure your production.ini like the following one:
    ...
    ###
    # logging configuration
    # http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/logging.html
    ###

    [loggers]
    keys = root, mip_project, exc_logge

    [handlers]
    keys = console, exc_handle

    [formatters]
    keys = generic, exc_formatter

    [logger_root]
    level = WARN
    handlers = console

    [logger_mip_project]
    level = WARN
    handlers =
    qualname = mip_project

    [logger_exc_logger]
    level = ERROR
    handlers = exc_handler
    qualname = exc_logger

    [handler_console]
    class = StreamHandler
    args = (sys.stderr,)
    level = NOTSET
    formatter = generic

    [handler_exc_handler]
    class = handlers.RotatingFileHandler
    args = ('exception.log', 'a', 10000000, 10)
    level = ERROR
    formatter = exc_formatter

    [formatter_generic]
    format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s

    [formatter_exc_formatter]
    format = %(asctime)s %(message)s

    [uwsgi]
    plugin = python
    ...
    master = true
    processes = 1
    threads = 4
    virtualenv = %d/your_python
    chdir = %d
    home = %d/your_python
    In the above example it is important omitting %(here)s/ in the RotatingFileHandler args, otherwise it won't be resolved running your app with uwsgi.

    If uwsgi complains about no paste.script.util.logging_config is available

    If your logger configuration is not considered by uwsgi and you see a warning more or less like a missing "paste.script.util.logging_config" module, just install PasteScript in your virtualenv:

    (your_python) $ pip install PasteScript

    And make sure your [uwsgi] section is pointing to your virtualenv (see previous section).

    Anyway, once installed PasteScript (I've tested the 1.7.5 version), all went fine:

    $ uwsgi --ini-paste-logged production.ini

    Unfortunately I wasn't able to get exception logs enabled if I call the above command in a supervisord configuration file. Any suggestions?

    See also:

    Windows service and  CherryPy

    If you want to serve a Pyramid application with CherryPy (or creating a CherryPy based Windows service) with exception logging enabled you'll have to setup logging by hand because CherryPy does not consider your logging configuration.

    See also:
    You can follow the above guides and add the bold lines in your pyramidsvc.py in order to have exceptions logged:
    from cherrypy import wsgiserver
    from pyramid.paster import get_app
    from pyramid.paster import setup_logging

    import os
    ... 
        def SvcDoRun(self):
     
    path = os.path.dirname(os.path.abspath(__file__))

    os.chdir(path)

    app = get_app(CONFIG_FILE)
    setup_logging(CONFIG_FILE)
            .... 

    Links

    A very interesting overview on Python logging and syslog:

    Viewing all articles
    Browse latest Browse all 25

    Trending Articles