Skip to content

Instantly share code, notes, and snippets.

@topper-123
Last active May 5, 2017 22:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save topper-123/85e27ffe261850eed150eac53d61b82d to your computer and use it in GitHub Desktop.
Save topper-123/85e27ffe261850eed150eac53d61b82d to your computer and use it in GitHub Desktop.
A log reader for Python
def getLogReader(name=None, *, level='info',
handler=None,
fmt='%(levelname)s | %(filename)s| line %(lineno)s | %(funcName)s | %(message)s'
) -> logging.Logger:
"""Utility to create a logger with a given log level, a handler and output format set, etc.
This function simplifies creation of logging functions with handlers etc. set.
Parameters
----------
name : str
The specified name of the logger.
level : str
Log level. Options (case insensitive):
{'debug', 'info', 'warn', 'warning', 'error', 'critical'}.
handler: logging.Handler
Handler. If none given, use logging.StreamHandler(stream=logging.sys.stderr)
fmt: str
Logging format string.
Returns
-------
logging.Logger
Returns an instance of logging.Logger.
Example
---------
>>> getLogReader('mypackage.models', level='debug')
<Logger mypackage.models (DEBUG)>
"""
loglevels = {'debug': logging.DEBUG, 'info': logging.INFO, 'warn': logging.WARN,
'warning': logging.WARNING, 'error': logging.ERROR, 'critical': logging.CRITICAL}
if isinstance(level, str):
level = loglevels[level.lower()]
logger = logging.getLogger(name)
logger.setLevel(level)
if logger.handlers and handler is None: # otherwise StreamHandlers keeps getting added
return logger
if handler is None:
handler = logging.StreamHandler(stream=logging.sys.stderr)
if not handler.formatter:
formatter = logging.Formatter(fmt)
handler.setFormatter(formatter)
logger.addHandler(handler)
return logger
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment