Source code for eam.logging
#
# Copyright (c) 2018, Enthought, Inc.
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in enthought/LICENSE.txt and may be redistributed only
# under the conditions described in the aforementioned license. The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
#
# Thanks for using Enthought open source!
#
""" Setup logging support """
from __future__ import absolute_import
import logging
import logging.config
import logging.handlers
import os.path
import warnings
from .fileutils import makedirs
from . import __version__
logger = logging.getLogger(__name__)
[docs]class RotatingFileHandler(logging.handlers.RotatingFileHandler):
def _open(self):
makedirs(os.path.dirname(self.baseFilename))
return logging.handlers.RotatingFileHandler._open(self)
[docs]def enable_logging(verbosity_level, log_filename=None):
if verbosity_level is None and log_filename is None:
return
elif verbosity_level is None:
level = logging.WARN
elif verbosity_level >= 2:
level = logging.DEBUG
elif verbosity_level == 1:
level = logging.INFO
else:
level = logging.WARN
root_level = level
if log_filename is not None:
log_path = os.path.abspath(log_filename)
disable = False
try:
makedirs(os.path.dirname(log_path))
except OSError:
disable = True
else:
try:
with open(log_path, "a"):
pass
except OSError:
disable = True
if disable:
warnings.warn(
"No write access to '{}', disabling file logging".
format(log_filename))
log_filename = None
if log_filename is not None:
root_level = logging.DEBUG
logging.config.dictConfig({
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"f": {"format": "%(asctime)s [%(name)s:%(lineno)s] %(message)s"}},
"handlers": {
"console": {
"level": level,
"class": "logging.StreamHandler",
"stream": "ext://sys.stderr"},
"user_log": {
"level": "DEBUG",
"class": "eam.logging.RotatingFileHandler",
"filename": log_filename or "/dev/null",
"maxBytes": 1014 ** 2 * 8,
"delay": True,
"formatter": "f"}},
"root": {
"level": root_level,
"handlers": [
entry
for entry in ("console", "user_log" if log_filename else None)
if entry is not None]}})
msg = "Using eam version {}".format(__version__)
logger.info(msg)