METADATA 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. Metadata-Version: 2.0
  2. Name: structlog
  3. Version: 17.2.0
  4. Summary: Structured Logging for Python
  5. Home-page: http://www.structlog.org/
  6. Author: Hynek Schlawack
  7. Author-email: hs@ox.cx
  8. License: MIT or Apache License, Version 2.0
  9. Keywords: logging,structured,structure,log
  10. Platform: UNKNOWN
  11. Classifier: Development Status :: 5 - Production/Stable
  12. Classifier: Intended Audience :: Developers
  13. Classifier: License :: OSI Approved :: Apache Software License
  14. Classifier: License :: OSI Approved :: MIT License
  15. Classifier: Natural Language :: English
  16. Classifier: Operating System :: OS Independent
  17. Classifier: Programming Language :: Python :: 2
  18. Classifier: Programming Language :: Python :: 2.7
  19. Classifier: Programming Language :: Python :: 3
  20. Classifier: Programming Language :: Python :: 3.4
  21. Classifier: Programming Language :: Python :: 3.5
  22. Classifier: Programming Language :: Python :: 3.6
  23. Classifier: Programming Language :: Python :: Implementation :: CPython
  24. Classifier: Programming Language :: Python :: Implementation :: PyPy
  25. Classifier: Programming Language :: Python
  26. Classifier: Topic :: Software Development :: Libraries :: Python Modules
  27. Requires-Dist: six
  28. Provides-Extra: dev
  29. Requires-Dist: colorama; extra == 'dev'
  30. .. image:: http://www.structlog.org/en/latest/_static/structlog_logo_small.png
  31. :alt: structlog Logo
  32. :width: 256px
  33. :target: http://www.structlog.org/
  34. ========================================
  35. structlog: Structured Logging for Python
  36. ========================================
  37. .. image:: https://readthedocs.org/projects/structlog/badge/?version=stable
  38. :target: https://structlog.readthedocs.io/en/stable/?badge=stable
  39. :alt: Documentation Status
  40. .. image:: https://travis-ci.org/hynek/structlog.svg?branch=master
  41. :target: https://travis-ci.org/hynek/structlog
  42. .. image:: https://codecov.io/github/hynek/structlog/branch/master/graph/badge.svg
  43. :target: https://codecov.io/github/hynek/structlog
  44. :alt: Test Coverage
  45. .. image:: https://www.irccloud.com/invite-svg?channel=%23structlog&hostname=irc.freenode.net&port=6697&ssl=1
  46. :target: https://www.irccloud.com/invite?channel=%23structlog&hostname=irc.freenode.net&port=6697&ssl=1
  47. .. begin
  48. ``structlog`` makes logging in Python less painful and more powerful by adding structure to your log entries.
  49. It's up to you whether you want ``structlog`` to take care about the **output** of your log entries or whether you prefer to **forward** them to an existing logging system like the standard library's ``logging`` module.
  50. *No* `monkey patching <https://en.wikipedia.org/wiki/Monkey_patch>`_ involved in either case.
  51. Easier Logging
  52. ==============
  53. You can stop writing prose and start thinking in terms of an event that happens in the context of key/value pairs:
  54. .. code-block:: pycon
  55. >>> from structlog import get_logger
  56. >>> log = get_logger()
  57. >>> log.info("key_value_logging", out_of_the_box=True, effort=0)
  58. 2016-04-20 16:20.13 key_value_logging effort=0 out_of_the_box=True
  59. Each log entry is a meaningful dictionary instead of an opaque string now!
  60. Data Binding
  61. ============
  62. Since log entries are dictionaries, you can start binding and re-binding key/value pairs to your loggers to ensure they are present in every following logging call:
  63. .. code-block:: pycon
  64. >>> log = log.bind(user="anonymous", some_key=23)
  65. >>> log = log.bind(user="hynek", another_key=42)
  66. >>> log.info("user.logged_in", happy=True)
  67. 2016-04-20 16:20.13 user.logged_in another_key=42 happy=True some_key=23 user='hynek'
  68. Powerful Pipelines
  69. ==================
  70. Each log entry goes through a `processor pipeline <http://www.structlog.org/en/stable/processors.html>`_ that is just a chain of functions that receive a dictionary and return a new dictionary that gets fed into the next function.
  71. That allows for simple but powerful data manipulation:
  72. .. code-block:: python
  73. def timestamper(logger, log_method, event_dict):
  74. """Add a timestamp to each log entry."""
  75. event_dict["timestamp"] = time.time()
  76. return event_dict
  77. There are `plenty of processors <http://www.structlog.org/en/stable/api.html#module-structlog.processors>`_ for most common tasks coming with ``structlog``:
  78. - Collectors of `call stack information <http://www.structlog.org/en/stable/api.html#structlog.processors.StackInfoRenderer>`_ ("How did this log entry happen?"),
  79. - …and `exceptions <http://www.structlog.org/en/stable/api.html#structlog.processors.format_exc_info>`_ ("What happened‽").
  80. - Unicode encoders/decoders.
  81. - Flexible `timestamping <http://www.structlog.org/en/stable/api.html#structlog.processors.TimeStamper>`_.
  82. Formatting
  83. ==========
  84. ``structlog`` is completely flexible about *how* the resulting log entry is emitted.
  85. Since each log entry is a dictionary, it can be formatted to **any** format:
  86. - A colorful key/value format for `local development <http://www.structlog.org/en/stable/development.html>`_,
  87. - `JSON <http://www.structlog.org/en/stable/api.html#structlog.processors.JSONRenderer>`_ for easy parsing,
  88. - or some standard format you have parsers for like nginx or Apache httpd.
  89. Internally, formatters are processors whose return value (usually a string) is passed into loggers that are responsible for the output of your message.
  90. ``structlog`` comes with multiple useful formatters out of-the-box.
  91. Output
  92. ======
  93. ``structlog`` is also very flexible with the final output of your log entries:
  94. - A **built-in** lightweight printer like in the examples above.
  95. Easy to use and fast.
  96. - Use the **standard library**'s or **Twisted**'s logging modules for compatibility.
  97. In this case ``structlog`` works like a wrapper that formats a string and passes them off into existing systems that won't ever know that ``structlog`` even exists.
  98. Or the other way round: ``structlog`` comes with a ``logging`` formatter that allows for processing third party log records.
  99. - Don't format it to a string at all!
  100. ``structlog`` passes you a dictionary and you can do with it whatever you want.
  101. Reported uses cases are sending them out via network or saving them in a database.
  102. .. -end-
  103. Project Information
  104. ===================
  105. ``structlog`` is dual-licensed under `Apache License, version 2 <http://choosealicense.com/licenses/apache/>`_ and `MIT <http://choosealicense.com/licenses/mit/>`_, available from `PyPI <https://pypi.python.org/pypi/structlog/>`_, the source code can be found on `GitHub <https://github.com/hynek/structlog>`_, the documentation at http://www.structlog.org/.
  106. ``structlog`` targets Python 2.7, 3.4 and newer, and PyPy.
  107. If you need any help, visit us on ``#structlog`` on `Freenode <https://freenode.net>`_!
  108. Release Information
  109. ===================
  110. 17.2.0 (2017-05-15)
  111. -------------------
  112. Backward-incompatible changes:
  113. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  114. *none*
  115. Deprecations:
  116. ^^^^^^^^^^^^^
  117. *none*
  118. Changes:
  119. ^^^^^^^^
  120. - ``structlog.stdlib.ProcessorFormatter`` now accepts *keep_exc_info* and *keep_stack_info* arguments to control what to do with this information on log records.
  121. Most likely you want them both to be ``False`` therefore it's the default.
  122. `#109 <https://github.com/hynek/structlog/issues/109>`_
  123. - ``structlog.stdlib.add_logger_name()`` now works in ``structlog.stdlib.ProcessorFormatter``'s ``foreign_pre_chain``.
  124. `#112 <https://github.com/hynek/structlog/issues/112>`_
  125. - Clear log record args in ``structlog.stdlib.ProcessorFormatter`` after rendering.
  126. This fix is for you if you tried to use it and got ``TypeError: not all arguments converted during string formatting`` exceptions.
  127. `#116 <https://github.com/hynek/structlog/issues/116>`_
  128. `#117 <https://github.com/hynek/structlog/issues/117>`_
  129. `Full changelog <http://www.structlog.org/en/stable/changelog.html>`_.
  130. Authors
  131. =======
  132. ``structlog`` is written and maintained by `Hynek Schlawack <https://hynek.me/>`_.
  133. It’s inspired by previous work done by `Jean-Paul Calderone <http://as.ynchrono.us/>`_ and `David Reid <https://dreid.org/>`_.
  134. The development is kindly supported by `Variomedia AG <https://www.variomedia.de/>`_.
  135. A full list of contributors can be found on GitHub’s `overview <https://github.com/hynek/structlog/graphs/contributors>`_.
  136. Some of them disapprove of the addition of thread local context data. :)
  137. The ``structlog`` logo has been contributed by `Russell Keith-Magee <https://github.com/freakboy3742>`_.