Source code for dandan.logger

# encoding=utf-8
from __future__ import absolute_import

import logging
import logging.config

from dandan import value

[docs]def getLogger(name="dandan", level=logging.DEBUG, filename=None, backup_count=10): ''' Get logger for convenient method Args: * name (string): logger name, default as 'dandan' * level (logger level, optional): level of this logger such as DEBUG, INFO, WARNING, ERROR, FATAL * filename (string, optional): filename for timerotedlogger * backup_count (int, optional): file backup count, if file count larger than count, then oldest file will be deleted. Returns: * logger: the logger named name ''' logger = logging.getLogger(name) if len(logger.handlers) > 0: return logger config = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': '[%(asctime)s] [%(module)s] [%(lineno)d] [%(levelname)s] | %(message)s' }, }, 'handlers': { 'console': { 'class': 'logging.StreamHandler', 'formatter': 'verbose', "level": "DEBUG", }, 'null': { 'class': 'logging.NullHandler', }, }, 'loggers': { name: { 'handlers': ['console', ], 'level': level, 'propagate': True, }, }, } config = value.AttrDict(config) if filename: config.handlers.file = { 'class': 'logging.handlers.TimedRotatingFileHandler', 'formatter': 'verbose', 'filename': filename, 'when': "MIDNIGHT", "level": "INFO", "backupCount": backup_count, "encoding": "utf8", } config.loggers[name].handlers.append("file") logging.config.dictConfig(config) logger = logging.getLogger(name) for handler in logger.handlers: if handler.name != "file": continue if handler.suffix != "%Y-%m-%d.log": handler.suffix = "%Y-%m-%d.log" return logger