Source code for tea.logger.log

import os
import sys
import time
import logging
from logging.handlers import RotatingFileHandler

from tea import shell

# Constants
FMT = (
    "%(asctime)s.%(msecs)03d   %(levelname)11s: %(message)s "
    "[%(name)s:%(lineno)d]"
)
FMT_SHORT = "%(asctime)s %(levelname)11s: %(message)s [%(name)s:%(lineno)d]"
FMT_STDOUT = "%(levelname)-11s - %(message)s [%(name)s:%(lineno)d]"
FMT_DATE = "%Y.%m.%d %H:%M:%S"

logging.basicConfig(
    stream=sys.stderr, format=FMT_SHORT, datefmt=FMT_DATE, level=logging.DEBUG
)


[docs]def configure_logging( filename=None, filemode="a", datefmt=FMT_DATE, fmt=FMT, stdout_fmt=FMT_STDOUT, level=logging.DEBUG, stdout_level=logging.WARNING, initial_file_message="", max_size=1048576, rotations_number=5, remove_handlers=True, ): """Configure logging module. Args: filename (str): Specifies a filename to log to. filemode (str): Specifies the mode to open the log file. Values: ``'a'``, ``'w'``. *Default:* ``a``. datefmt (str): Use the specified date/time format. fmt (str): Format string for the file handler. stdout_fmt (str): Format string for the stdout handler. level (int): Log level for the file handler. Log levels are the same as the log levels from the standard :mod:`logging` module. *Default:* ``logging.DEBUG`` stdout_level (int): Log level for the stdout handler. Log levels are the same as the log levels from the standard :mod:`logging` module. *Default:* ``logging.WARNING`` initial_file_message (str): First log entry written in file. max_size (int): Maximal size of the logfile. If the size of the file exceed the maximal size it will be rotated. rotations_number (int): Number of rotations to save. remove_handlers (bool): Remove all existing handlers. """ logger = logging.getLogger() logger.level = logging.NOTSET # Remove all handlers if remove_handlers: while len(logger.handlers) > 0: hdlr = logger.handlers[0] hdlr.close() logger.removeHandler(hdlr) # Create stdout handler if stdout_level is not None: stdout_handler = logging.StreamHandler(sys.stdout) stdout_handler.setLevel(stdout_level) stdout_formatter = logging.Formatter(stdout_fmt, datefmt) # stdoutFormatter.converter = time.gmtime stdout_handler.setFormatter(stdout_formatter) logger.addHandler(stdout_handler) # Create file handler if filename is provided if filename is not None: # Check if filename directory exists and creates it if it doesn't directory = os.path.abspath(os.path.dirname(filename)) if not os.path.isdir(directory): shell.mkdir(directory) # Create file handler file_handler = RotatingFileHandler( filename, filemode, max_size, rotations_number ) file_handler.setLevel(level) file_formatter = logging.Formatter(fmt, datefmt) file_formatter.converter = time.gmtime file_handler.setFormatter(file_formatter) logger.addHandler(file_handler) if initial_file_message: message = " %s " % initial_file_message file_handler.stream.write("\n" + message.center(100, "=") + "\n\n")