Include pyramid request attributes in your log messages
The pyramid_log distribution includes a Python logging formatter which makes Pyramid request attributes available for use in its format string. Specifically, pyramid_log.Formatter is special in the following ways:
The pyramid request has many attributes which can be useful when included in the logs of a web app. These include, but are not limited to:
See the Pyramid documentation for a more complete list of available request attributes.
pip install pyramid-log
It has been tested on python 2.6, 2.7, 3.2–3.4 as well as pypy and pypy3.
Development happens at https://github.com/dairiki/pyramid_log/.
If you configure logging in your application configuration (or some other) file you can do something like:
[loggers] key = root [handlers] keys = console [formatters] keys = pyramid [logger_root] level = INFO handlers = console [handler_console] class = StreamHandler args = (sys.stderr,) level = NOTSET formatter = pyramid [formatter_pyramid] # NB: Here is the interesting part! class = pyramid_log.Formatter format = %(asctime)s %(request.method|no request)s %(request.path_qs|)s %(levelname)-5.5s [%(name)s] %(message)s
This will result in your log messages looking something like:
2014-10-01 17:55:02,001 GET /path?arg=foo WARNI [myapp.views] This is some log message!
You can of course configure logging imperatively. For example, with:
import logging from pyramid_log import Formatter fmt = Formatter( '%(asctime)s %(request.client_addr|-)s' ' %(request.method|-)s %(request.path_qs|-)s: %(message)s') logging.basicConfig() root_logger = logging.getLogger() for handler in root_logger.handlers: handler.setFormatter(fmt)
Then, a view can log a message like so:
log = logging.getLogger(__name__) @view_config(name='persimmon') def persimmon_view(request): log.warning("%s was called!", request.view_name)
Which will yield a log message like:
2014-10-01 17:55:02,001 192.168.1.1 GET /persimmon: persimmon was called
The dot notation can be used to access not only instance attributes, but also to access items in dict-like values. Attribute access is tried first; if there is no attribute of the given name, then the instances __getitem__ method is tried. For example, "%(request.matchdict.id)s" will get at request.matchdict['id'].
Explicit fallback values are always interpreted as strings, however, if the fallback is used in a numeric context, an attempt will be made at conversion to the requested type. For example, if there is no request, "%+(request.status_code|555)d" will format to "+555".
If the fallback string can not be converted to a numeric value, then 0 (zero) is used in integer contexts and NaN is used in float contexts.
If no fallback value is explicitly specified, then a default fallback value will be used if the requested attribute does not exist. The missing attribute name is included in the default fallback value. For example "%(request.method)s" will produce "<?request.method?>" if there is no current request.
The pyramid_logging distribution provides similar functionality.
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|File Name & Checksum SHA256 Checksum Help||Version||File Type||Upload Date|
|pyramid_log-0.2-py2.py3-none-any.whl (12.6 kB) Copy SHA256 Checksum SHA256||any||Wheel||Oct 9, 2014|
|pyramid_log-0.2.tar.gz (12.4 kB) Copy SHA256 Checksum SHA256||–||Source||Oct 9, 2014|