# -*- coding: utf-8 -*-
"""
Configure logging helper function with correct UTC name.
"""
import logging
import time
[docs]
def setup_logging(debug, filename, modname=None):
"""
Can be imported by ``<my_package>`` to create a log file for logging
``<my_package>`` class output. In this example we use a ``debug``
flag set in ``<my_package>`` to change the Log Level and ``filename``
to set log path. We also use UTC time and force the name in ``datefmt``.
"""
if debug:
log_level = logging.getLevelName('DEBUG')
else:
log_level = logging.getLevelName('INFO')
if not modname:
my_fmt = '%(asctime)s %(levelname)s %(name)s.%(funcName)s(%(lineno)d) %(message)s'
else:
my_fmt = '%(asctime)s %(levelname)s %(mod_name)s.%(funcName)s(%(lineno)d) %(message)s'
default_factory = logging.getLogRecordFactory()
def record_factory(*args, **kwargs):
record = default_factory(*args, **kwargs)
record.mod_name = modname
return record
logging.setLogRecordFactory(record_factory)
logging.basicConfig(
level=log_level,
format=my_fmt,
datefmt='%Y-%m-%d %H:%M:%S UTC',
filename=filename,
)
# BUG: This does not print the TZ name because logging module uses
# time instead of tz-aware datetime objects (so we force the
# correct name in datefmt above).
logging.Formatter.converter = time.gmtime
# To also log parent info, try something like this
# global logger
# logger = logging.getLogger("my_package")