2 Implements logging functionality
4 Upon import creates a module level log class (log) and
5 the following logging functions:
7 debug, info, warn and error
9 The default formatters will print out the function the log was triggered from.
14 # python 2.5 the watershed release that introduced most changes since 2.1
16 PYTHON_25
= sys
.version_info
>= (2, 5)
18 def get_logger(name
='pygr-log', stream
=sys
.stdout
, formatter
=None):
23 >>> info('logtest, this message SHOULD NOT be visible')
25 >>> info('logtest, this message should be visible')
27 >>> debug('logtest, this message SHOULD NOT be visible')
28 >>> info('logtest, this message should be visible')
30 logger
= logging
.getLogger(name
)
32 # this is needed in case the process is
33 # forked/multithreaded; loggers exist in a global scope
34 # we don't want each import to duplocate this handler
36 if not logger
.handlers
:
37 console
= logging
.StreamHandler(stream
)
38 console
.setLevel(logging
.DEBUG
)
40 format
= '%(levelname)s %(module)s.%(funcName)s: %(message)s'
42 format
= '%(levelname)s %(module)s: %(message)s'
44 formatter
= formatter
or logging
.Formatter(format
)
45 console
.setFormatter(formatter
)
46 logger
.addHandler(console
)
47 logger
.setLevel(logging
.DEBUG
)
52 Disables logging levels
53 Levels: DEBUG, INFO, WARNING, ERROR
56 >>> info('logtest, this message SHOULD NOT be visible')
59 value
= dict(NOTSET
=0, DEBUG
=10, INFO
=20, WARNING
=30, ERROR
=40)\
60 .get(level
.upper(), 0)
61 logging
.disable(value
)
63 # populate some loggers by default
65 debug
, info
, warn
, error
= log
.debug
, log
.info
, log
.warn
, log
.error
68 "Performs module level testing"
70 doctest
.testmod(verbose
=verbose
)
72 if __name__
== "__main__":