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.
From stable package on PyPI
pip install nanolog
From bleeding edge master branch
pip install git+git://github.com/SurrealAI/nanolog.git
Logging levels, from least severe to most:
LOG_ALL
: log everythingTRACE
: fine-grained debugging messagesDEBUG
: normal debuggingINFO
: messages you usually don't want to seeNOTICE
(i.e.INFO5
): non-error messages you usually want to seeWARNING
: exceptional circumstances that might not be errorsERROR
: errors that occur, but are anticipated and handledCRITICAL
: fatal errors that lead to terminationLOG_OFF
: turn off all logging
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
# nanolog use 'warn' instead of 'warning'
logger.warnfmt('{}, 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
logger.info7(...) # info level 7
logger.errorfmt8(...) # error level 8
Display a banner line or block
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
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
)
logger.infopp7(...)
logger.warnppfmt('my warning {:.3f} format {:.2f} string', 1/7., 1/9.)
TODO
TODO
Better alternatives for the pprint
module in python standard lib.
-
pprint
: takes variable number of objects, just likeprint()
-
pprintstr
: return string instead of printing to IO stream -
pprintfmt
: just likeprint('...'.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
- PrintRedirection
- PrintFile
- PrintSuppress
- PrintString