美文网首页
Python的logging使用

Python的logging使用

作者: 冬至是条狗 | 来源:发表于2019-02-07 15:46 被阅读0次

    自己使用的配置:

    import os
    import logging.config
    
    # 定义三种日志输出格式 开始
    standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
     \
                      '[%(levelname)s][%(message)s]'  # 其中name为getlogger指定的名字
    
    simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
    
    id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
    
    My_log_format = "[%(asctime)s][%(filename)s:%(lineno)d][%(levelname)s][%(message)s]"
    # 定义日志输出格式 结束
    
    # 定义日志文件夹
    
    logfile_dir = os.path.dirname(os.path.abspath(__file__))  # log文件的目录
    # 如果不存在定义的日志目录就创建一个
    logfile_dir = os.path.join(logfile_dir, 'logs')
    if not os.path.isdir(logfile_dir):
        os.mkdir(logfile_dir)
    
    logfile_name = 'My_log.log'  # log文件名
    
    # log文件的全路径
    
    logfile_path = os.path.join(logfile_dir, logfile_name)
    
    # log配置字典
    
    LOGGING_DIC = {
    
        'version': 1,
    
        'disable_existing_loggers': False,
        # 定义 格式
        'formatters': {
    
            'standard': {
    
                'format': My_log_format
    
            },
    
            'simple': {
    
                'format': simple_format
    
            },
    
            'id_simple': {
    
                'format': id_simple_format
    
            },
    
        },
    
        'filters': {},
    
        'handlers': {
    
            # 打印到终端的日志
    
            'console': {
    
                'level': 'DEBUG',
    
                'class': 'logging.StreamHandler',  # 打印到屏幕
    
                'formatter': 'simple'
    
            },
    
            # 打印到文件的日志,收集info及以上的日志
    
            'default': {
    
                'level': 'DEBUG',
    
                'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
    
                'formatter': 'standard',
    
                'filename': logfile_path,  # 日志文件
    
                'maxBytes': 1024 * 1024 * 5,  # 日志大小 5M
    
                'backupCount': 5,
    
                'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
    
            },
    
            'boss': {
    
                'level': 'DEBUG',
    
                'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
    
                'formatter': 'standard',
    
                'filename': logfile_path,  # 日志文件
    
                'maxBytes': 1024 * 1024 * 5,  # 日志大小 5M
    
                'backupCount': 5,
    
                'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
            },
    
            'My_log': {
    
                'level': 'DEBUG',
    
                'class': 'logging.handlers.TimedRotatingFileHandler',  # 保存到文件,使用时间轮转
    
                'formatter': 'standard',
    
                'filename': logfile_path,  # 日志文件
    
                'when': 'D',  # 每天一个文件
    
                'backupCount': 30,  # 最大保存日期
    
                'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
            },
    
        },
    
        'loggers': {
    
            # logger1=logging.getLogger(__name__)拿到的logger配置
    
            '': {
    
                'handlers': ['default', 'console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
    
                'level': 'DEBUG',
    
                'propagate': True,  # 向上(更高level的logger)传递
    
            },
    
            # logger1=logging.getLogger('collect')拿到的logger配置
    
            'collect': {
    
                'handlers': ['boss', ],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
    
                'level': 'DEBUG',
    
                'propagate': True,  # 向上(更高level的logger)传递
    
            },
    
        },
    
    }
    
    
    def load_my_logging_cfg():
        logging.config.dictConfig(LOGGING_DIC)  # 导入上面定义的logging配置
        my_log = logging.getLogger('My_log')
        return my_log
        
    
    if __name__ == '__main__':
        load_my_logging_cfg()
    
    

    import 此文件调用load_my_logging_cfg(); 返回一个打印日志的对象

    import My_logging
    
    logger = My_logging.load_my_logging_cfg()
    logger.info(" info ")
    logger.debug(" debug ")
    logger.warning(" warning ")
    logger.error(" debug ")
    logger.critical(" critical ")
    
    

    同时会在同级目录下创建一个logs文件夹,并创建log日志

    此外,格式可以自己定制,可定制的内容如下:

    %(levelno)s:打印日志级别的数值
    %(levelname)s:打印日志级别的名称
    %(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]
    %(filename)s:打印当前执行程序名
    %(funcName)s:打印日志的当前函数
    %(lineno)d:打印日志的当前行号
    %(asctime)s:打印日志的时间
    %(thread)d:打印线程ID
    %(threadName)s:打印线程名称
    %(process)d:打印进程ID
    %(message)s:打印日志信息
    
    

    相关文章

      网友评论

          本文标题:Python的logging使用

          本文链接:https://www.haomeiwen.com/subject/uvxgsqtx.html