zoukankan      html  css  js  c++  java
  • logging,包

    import 方式

    所有对包的操作,都相当于对包下的__init__操作

    from a.b.c import d

    b 必须 是包 import 最后只有一个层级

    相对导入 . 代表当前路径, .. 代表父级路径

    logging日志

    # 旗舰版
    ## 旗舰版logging
    
    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]' ## (时间,线程名字,线程数量,任务名字,文件名字,报错行数,等级,信息)
    
    simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
    
    id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
    
    ## 目录 路径
    logfile_dir = os.path.dirname(os.path.abspath(__file__))
    
    logfile_name = 'log1.log'
    logfile_name_boss = 'boss.log'
    ## 如果不存在定义的日志目录就创建一个
    
    if not os.path.isdir(logfile_dir):
        os.mkdir(logfile_dir)
    
    # log 文件的全路径
    
    logfile_path = os.path.join(logfile_dir,'logs',logfile_name)
    logfile_path_boss = os.path.join(logfile_dir,'boss',logfile_name_boss)
    ## log配置字典
    
    
    LOGGING_DIG= {
        'version':1,
        'disable_existing_loggers':False,
        'formatters':{          ## 配置相应格式化
            'standard':{
                'format':standard_format
            },
            'simple':{
                'format':simple_format
            },
            'easy':{
                'format':id_simple_format
            }
        },
        'filters':{},
        'handlers':{  ## 配置句柄 文件 或者 控制台
            'console':{
                'level':'DEBUG',
                'class':'logging.StreamHandler',
                'formatter':'simple'
            },
            'default':{
                'level':'DEBUG',
                'class':'logging.handlers.RotatingFileHandler', ## 轮换着保存到文件
                'formatter':'standard',
                'filename':logfile_path,   # 文件名字  绝对路径
                'maxBytes':1024*1024*5,  ## 单文件最大大小  字节
                'backupCount':5,         ## 最多多少个文件
                'encoding':'utf-8'
            },
            'sb_boss':{
                'level':'DEBUG',
                'class':'logging.handlers.RotatingFileHandler', ## 轮换着保存到文件
                'formatter':'easy',
                'filename':logfile_path_boss,   # 文件名字  绝对路径
                'maxBytes':1024*1024*5,  ## 单文件最大大小  字节
                'backupCount':5,         ## 最多多少个文件
                'encoding':'utf-8'
            }
        },
        'loggers':{        #对象
                '':{
                    'handlers':['default','console','sb_boss'],
                    'level':'DEBUG',
                    'propagate':True
                }
        }
    }
    
    
    
    def load_my_logging_cfg(task_id):
        logging.config.dictConfig(LOGGING_DIG)  ## 添加配置
        logger = logging.getLogger(task_id) ##  任务标识
        return logger
    
    
    if __name__ == '__main__':
        logger = load_my_logging_cfg('购物车')   ##这是使用,这个部分可以包装成函数
        logger.info('it works')
        
    
  • 相关阅读:
    bzoj2733 永无乡 平衡树按秩合并
    bzoj2752 高速公路 线段树
    bzoj1052 覆盖问题 二分答案 dfs
    bzoj1584 打扫卫生 dp
    bzoj1854 游戏 二分图
    bzoj3316 JC loves Mkk 二分答案 单调队列
    bzoj3643 Phi的反函数 数学 搜索
    有一种恐怖,叫大爆搜
    BZOJ3566 概率充电器 概率dp
    一些奇奇怪怪的过题思路
  • 原文地址:https://www.cnblogs.com/albert0823/p/11117029.html
Copyright © 2011-2022 走看看