Metadata-Version: 2.0
Name: nanolog
Version: 0.1.2
Summary: python logging on steroids, lightweight and convenient
Home-page: http://github.com/SurrealAI/nanolog
Author: Jim Fan
Author-email: UNKNOWN
License: GPLv3
Description-Content-Type: UNKNOWN
Keywords: logging,utility
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.0
Requires-Dist: prettyprinter

nanolog
=======

Life is too short. Use ``nanolog`` to make logging and printing simpler!

``nanolog`` features a convenient logger API built on top of python's
builtin ``logging``.

The library also ships with many printing utilities. Python 3 only.

Installation
------------

From stable package on PyPI

.. code:: bash

    pip install nanolog

From bleeding edge master branch

.. code:: bash

    pip install git+git://github.com/SurrealAI/nanolog.git

nanolog.Logger
==============

.. code:: python

    import nanolog as nl

    logger = nl.Logger.create_logger(
        'main',
        stream='out',
        level='debug',
    )

    logger.info('my', 3, 'world', 1/16.)  # just like print
    # >>> my 3 world 0.0625

    logger.warningfmt('{}, we are {:.3f} miles from {planet}',
                      'Houston', 17/7, planet='Mars')  # just like str.format
    # >>> Houston, we are 2.429 miles from Mars

Use a trailing number to indicate level, the larger the higher priority

.. code:: python

    logger.info7(...)  # info level 7
    logger.errorfmt8(...)  # error level 8

Display a banner line or block

.. code:: python

    logger.infobanner3('my', 3, 'world', symbol='!', banner_len=16, banner_lines=3)

prints:

::

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!
    !!!!!!!! my 3 world !!!!!!!!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!

Of course, banner method also comes with a ``str.format`` version

.. code:: python

    logger.debugbannerfmt(
        '{3}&{0}&{2}&{1}', 'a', 'b', 'c', 'd', 
        symbol='<*_*>', banner_len=16, banner_lines=6
    )

displays:

::

    <*_*><*_*><*_*><*_*><*_*>
    <*_*><*_*><*_*><*_*><*_*>
    <*_*><*_ d&a&c&b <*_*><*_
    <*_*><*_*><*_*><*_*><*_*>
    <*_*><*_*><*_*><*_*><*_*>
    <*_*><*_*><*_*><*_*><*_*>

Prettyprint support (uses the thirdparty lib ``prettyprinter``)

.. code:: python

    logger.infopp7(...)
    logger.warningppfmt('my warning {:.3f} format {:.2f} string', 1/7., 1/9.)

Logger config
-------------

TODO

Time formatting
---------------

TODO

Printing utililites
===================

prettyprint
-----------

Better alternatives for the ``pprint`` module in python standard lib.

-  ``pprint``: takes variable number of objects, just like ``print()``

-  ``pprintstr``: return string instead of printing to IO stream

-  ``pprintfmt``: just like ``print('...'.format)``

-  ``pprintfmtstr``: return string instead of printing to IO stream

Convenient aliases (``pp`` stands for ``prettyprint``; a single ``p``
means normal print)

+--------------+--------------------+
| short        | original           |
+==============+====================+
| ``pf``       | ``printfmt``       |
+--------------+--------------------+
| ``pferr``    | ``printfmterr``    |
+--------------+--------------------+
| ``pstr``     | ``printstr``       |
+--------------+--------------------+
| ``perr``     | ``printerr``       |
+--------------+--------------------+
| ``pp``       | ``pprint``         |
+--------------+--------------------+
| ``ppstr``    | ``pprintstr``      |
+--------------+--------------------+
| ``ppf``      | ``pprintfmt``      |
+--------------+--------------------+
| ``ppfstr``   | ``pprintfmtstr``   |
+--------------+--------------------+

TODO: talk about global configs

Print redirection context managers
----------------------------------

-  PrintRedirection
-  PrintFile
-  PrintSuppress
-  PrintString

