cipher.logview 1.1.0
WSGI middleware that shows you log messages produced during request handling.
License: MIT

cipher.logview
==============

WSGI middleware that shows you log messages produced during request handling.

Wraps Dozer_ and adds a few features:

- Pretty request timeline for functions decorated with
  ``@cipher.logview.timed``.

- Stack formatter shows the value of ``__traceback_info__`` in each stack
  frame, if a local with that name exists (which is a convention used by
  `zope.exceptions`_\.exceptionformatter).

- A monkey-patch for `zope.browserpage`_\'s ViewPageTemplateFile that logs the
  names of page templates being rendered (enable with ``monkeypatch=True``).

- A monkey-patch for `zope.app.publication`_\'s ZopePublication that logs the
  name of the view class that is being called, and also the representation of
  and interfaces provided by the content object (enable with
  ``monkeypatch=True``).


Usage
-----

Add ``cipher.logview.LogviewMiddleware`` in your WSGI pipeline.

For example, here's an excerpt for a PasteDeploy_-style paster.ini::

    [filter-app:logview]
    use = egg:cipher.logview
    next = main
    loglevel = DEBUG
    keep_tracebacks = yes
    monkeypatch = yes

    # highlighting rules: logview.substring = css-color
    logview.sql = #fee
    logview.txn = #efe

    # traceback highlighting rules: traceback.substring=css-color
    traceback.dozer/ = #ddd
    traceback.python2.7/ = #ccc
    traceback.paste/ = #bbb
    traceback.webob/ = #aaa
    traceback.weberror/ = #999
    traceback.zope/ = #888
    traceback.z3c/ = #888
    traceback.storm/ = #777
    traceback.transaction/ = #666
    traceback.ZODB/ = #555
    traceback.keas/ = #444
    traceback.cipher/ = #840

which lets you optionally enable the middleware from the command line ::

    bin/paster serve paster.ini -n logview

Note: if you want to see debug messages -- such as those produced by
cipher.logview itself -- you will need to make sure the logging level of
the root logger is set to DEBUG.  If you don't want debug messages in
your log files (and who does?), filter them out by setting the level of
each handler.  Example paster.ini::

    [logging]
    keys = root, ...

    [logger_root]
    handlers = stdout, logfile
    level = DEBUG

    [handlers]
    keys = stdout, logfile, ...

    [handler_stdout]
    class = StreamHandler
    args = (sys.stdout,)
    level = INFO
    formatter = ...

    [handler_logfile]
    class = logging.handlers.RotatingFileHandler
    args = ('events.log', 'a', 10*1024*1024, 5)
    level = INFO
    formatter = ...


.. Links

.. _Dozer: http://pypi.python.org/pypi/Dozer
.. _PasteDeploy: http://pypi.python.org/pypi/PasteDeploy
.. _zope.exceptions: http://pypi.python.org/pypi/zope.exceptions
.. _zope.browserpage: http://pypi.python.org/pypi/zope.browserpage
.. _zope.app.publication: http://pypi.python.org/pypi/zope.app.publication


Changes
=======

1.1.0 (2013-03-22)
------------------

- Add support for Python 3.3.

- Require Dozer 0.4.

- No longer require Paste.

- Cosmetic fix: add the missing closing parenthesis to the request timeline
  labels.


1.0.2 (2012-12-13)
------------------

- Handle views that are methods (e.g. <browser:page class="..."
  attribute="..." />): show the class and method name, the correct source
  location of the method, and the context.  Previously you'd see
  "Calling __builtin__.instancemethod - no source information available".

- Add cipher.logview.format_tb.  Use it to format exception tracebacks
  (requires Dozer 0.3).

- Add support for __traceback_supplement__ in format_stack/format_tb.
  This is used by Zope Page Templates to indicate the page template
  filename/line/column/expression.


1.0.1 (2012-12-07)
------------------

- Handle dynamic subclasses created by <browser:page> and show the real class.

- Bugfix: sometimes enumerating interfaces of the context could trigger a
  ForbiddenAttribute exception.

- Mention logging levels gotcha in README.rst.


1.0.0 (2012-12-05)
------------------

- First public release.