Project Description

What It Does

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:

It sets a .request attribute on the log record (if one doesn’t
already exist.)

It supports dotted attribute access in its format string. For
example, "%(request.method)s" and even
"%(request.matched_route.name)s" will work in the format string.

There is a syntax for explicitly specifying fallback values. For
example, a format string of "%(request.method|<norequest>)s"
will format to "<no request>" if there is no current request (or
if the current request has no method attribute.)

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:

2014-10-01 17:55:02,001 192.168.1.1 GET /persimmon: persimmon was called

Further Details

Accessing Dict-like Values

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'].

Numeric Fallback

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.

Default Fallback Values

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.

See Also

Author

History

Release 0.2.1 (2017-12-17)

This release officially drops support for python 2.6, 3.2, 3.3 (and theremore pypy3)
and adds support for python 3.5 and 3.6.

Other than changes in test configuration, there are no substantive
changes from 0.2.

Release 0.2 (2014-10-09)

Features

Better fallback values.

Now, by default, if an attribute is missing (which can happen, e.g.,
for %(request.method)s is there is no current request) it is
rendered as <?attribute-name?>
(e.g. "<?request.method?>".)

There is now a syntax for explicitly specifying fallback values. E.g.
"%(request.method|(no-request))" which will format to (no request),
if there is no current request (or if the current request does not have
a method attribute.)

Dict-like access to values

When looking up a dotted name, if an attribute can not be found,
dict-style (__getitem__) lookup will be attempted.
E.g. "%(request.matchdict.arg)" will get at
request.matchdict['arg'].

Release 0.1.1 (2014-10-02)

Bugs Fixed

If an exception is thrown by a request property, render it as None.

Disable logging during log formatting to prevent recursion if a request
property generates a log message.