当前位置:首页 > python > 正文内容

python 自定义好用logger模块

root5年前 (2022-01-13)python1584
# -*- coding:utf-8 -*-
import sys
import logging.handlers

DEFAULT_LOG_FMT = '%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s: %(message)s'
DEFUALT_LOG_DATEFMT = '%Y-%m-%d %H:%M:%S'
Handlers = {
    # logging.NOTSET : "./log/NOTSET.log",
    logging.DEBUG: "./log/DEBUG.log",
    logging.INFO: "./log/INFO.log",
    logging.WARNING: "./log/WARNING.log",
    logging.ERROR: "./log/ERROR.log",
    # logging.CRITICAL : "./log/CRITICAL.log"
}
class Logger(object):

    def __init__(self):
        # set formatter ,the log will print like this formatter
        self.formatter = logging.Formatter(fmt=DEFAULT_LOG_FMT, datefmt=DEFUALT_LOG_DATEFMT)
        self.log_set = {}
        # get logger and set handler
        for level in Handlers.keys():
            logger = logging.getLogger(str(Handlers[level]))
            if not logger.handlers:
                logger.addHandler(self._get_rotating_file_handler(Handlers[level]))
                logger.addHandler(self._get_console_handler())
                logger.setLevel(level)
                self.log_set[level] = logger
            else:
                self.log_set[level] = logger

    def _get_console_handler(self):
        '''get console handler,will print log on console'''
        console_handler = logging.StreamHandler(sys.stdout)
        console_handler.setFormatter(self.formatter)
        return console_handler

    def _get_rotating_file_handler(self, filename):
        '''get a file handler,will write log in file'''
        rotating_handler = logging.handlers.RotatingFileHandler(filename=filename, maxBytes=104857600, backupCount=5,
                                                                encoding="utf-8")
        rotating_handler.setFormatter(self.formatter)
        return rotating_handler

    @property
    def debug(self):
        '''return a function that write debug message'''
        return self.log_set[logging.DEBUG].debug

    @property
    def info(self):
        '''return a function that write info message'''
        return self.log_set[logging.INFO].info

    @property
    def warning(self):
        '''return a function that write warning message'''
        return self.log_set[logging.WARNING].warning

    @property
    def error(self):
        '''return a function that write error message'''
        return self.log_set[logging.ERROR].error


logger = Logger()

if __name__ == '__main__':

    logger.debug("debug")


非常好用的自定义logger模块

可以设置控制台输出和写入文件

对于写入数据库还需努力

扫描二维码推送至手机访问。

版权声明:本文由一叶知秋发布,如需转载请注明出处。

本文链接:https://zhiqiu.top/?id=207

分享给朋友:

相关文章

自定义logger 模块使调用打印日志的文件为调用文件而不是logger模块

更新logging 源码1248行f f f.f_back替换为f f f.f_back     f_2 f.f_back   ...

python os 模块文件常用操作

123456import os #回去当前文件路径os.path.realpath(__file__)#获取文件是否存在os.path.exists(filepath)#获取文件大小os.path.getsize(fil...

selenium控制webdriver  设置请求头。只能设置简单的。自定义和固定的格式无法修改成功

selenium控制webdriver 设置请求头。只能设置简单的。自定义和固定的格式无法修改成功

time selenium webdriver options webdriver.() options.() options.( options.() browser webdriver....

获取大文件的MD5值

(, )os.path.(, )logger.()         os.path.(, )logger.()  &...

python 之optparse模块OptionParser

该模块让python脚本命令能够符合标准的Unix命令例程式每个命令行参数就是由参数名字符串和参数属性组成的。如 -f 或者 file 分别是长短参数名当你将所有的命令行参数都定义好了的时候,我们需要调用parse_args()方法赖际熙a...

python2的pip 不能使用或者使用总是报错

python2的pip 不能使用或者使用总是报错

python2.7   当然可能还有其他情况有的是pip版本升级过高,有的是pip有点问题无法执行pip的命令升级python2的 pip 一定要小心推荐命令:pip install --upgrad...