zoukankan      html  css  js  c++  java
  • 007logging日志模块

    log日志

    工作日志分四个大类:

    系统日志:记录服务器的一些重要信息:监控系统,cpu温度,网卡流量,重要的硬件的一些指标,运维人员经常使用的,运维人员,记录操作的一些指令.

    网站日志: 访问异常,卡顿,网站一些板块,受欢迎程度,访问量,点击率.等等,蜘蛛爬取次数等等.

    辅助开发日志: 开发人员在开发项目中,利用日志进行排错,排除一些避免不了的错误(记录),辅助开发.

    记录用户信息日志: 用户的消费习惯,新闻偏好,等等.(数据库解决)

    日志: 是谁使用的? 一般都是开发者使用的.

    三个版本:

    Low版(简易版).

    标配版(标准版)

    import logging
    def log(lj):
        # 创建一个logging对象
        logger = logging.getLogger()
    
        # 创建一个文件对象
        fh = logging.FileHandler(lj, encoding='utf-8')#传参
    
        # 创建一个屏幕对象
        sh = logging.StreamHandler()
    
        # 配置显示格式
        # formatter1变量名
        formatter1 = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
        formatter2 = logging.Formatter('%(asctime)s %(message)s')
        fh.setFormatter(formatter1)#绑定  屏幕文件
        sh.setFormatter(formatter2)  #绑定屏幕
    
        logger.addHandler(fh)#绑定文件
        logger.addHandler(sh)#绑定屏幕
    
        # 总开关
        logger.setLevel(10)
    
        fh.setLevel(10)#文件级别
        sh.setLevel(50)#屏幕级别
    
        logging.debug('调试模式')  # 10
        logging.info('正常模式')  # 20
        logging.warning('警告信息')  # 30
        logging.error('错误信息')  # 40
        # logging.critical('严重错误信息')  # 50
    log(r'D:s23day19 包的初识 日志模块day19日志标配版日志aaazz.log')
    

    旗舰版(项目中使用的,Django项目)

    自定制(通过字典的方式)
    轮转日志的功能
    """
    logging配置
    """
    
    import os
    import logging.config
    
    # 定义三种日志输出格式 开始
    def load_my_logging_cfg(n):
        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'#简易版
    
        # 定义日志输出格式 结束
    
        logfile_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))+"log"  # log文件的目录**************************
    
        logfile_name = '创建课程'+'.log'  # log文件名************** 'all2.lg'
    
        # 如果不存在定义的日志目录就创建一个
        if not os.path.isdir(logfile_dir):
            os.mkdir(logfile_dir)
    
        # log文件的全路径 调最外层'handlers'里面
        logfile_path = os.path.join(logfile_dir, logfile_name)
    
        # log配置字典
        # LOGGING_DIC第一层的所有的键不能更改
    
        LOGGING_DIC = {
            'version': 1,  # 版本号
            'disable_existing_loggers': False,  # 固定写法
            'formatters': {
                'standard': {
                    'format': standard_format##********绑定上面的3种格式之一对应下面字典 'formatter'
                },#标准的格式
                'simple': {
                    'format': simple_format
                },#简单的格式
                'chaojiandan':{'format':id_simple_format},#超简单的格式绑定上面的3种格式之一对应下面字典 'formatter'
            },  # 配置格式 上面3个 选其中一个 上面调了 下面也调
            'filters': {},  # 固定空字典 过滤模式
            'handlers': {
                # 打印到终端的日志
                'console': {
                    'level': 'ERROR',######调级别 5个级别  屏幕显示只要调这个 可以改
                    'class': 'logging.StreamHandler',  # 打印到屏幕 固定的
                    'formatter': 'simple' ##****调屏幕显示格式 可以改 对应'standard'里面的键  'standard' 'simple'
                },
                # 打印到文件的日志,收集info及以上的日志
                'default': {
                    'level': 'DEBUG',######调级别5个级别   文件显示只要调这个 可以改
                    'class': 'logging.handlers.RotatingFileHandler',  # 配置轮转 保存到文件 固定不变
                    'formatter': 'standard',###****调文件显示格式 可以改 对应'standard'里面的键  'standard' 'simple'
                    'filename': logfile_path,  # 日志文件 对应 log文件的全路径  要一一对应
                    'maxBytes': 1024*1024*5,  # 日志大小 5M 以字节为单位
                    'backupCount': 5,#轮转次数
                    'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
                },
            },  # 配置 句柄 是文件写入还是屏幕显示
            'loggers': {
                # logging.getLogger(__name__)拿到的logger配置
                '': {
                    'handlers': ['default', 'console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
                    'level': 'DEBUG',#总级别
                    'propagate': True,  # 向上(更高level的logger)传递
                },
            },  # 固定写法
        }
    
    
    # def load_my_logging_cfg(n):
        logging.config.dictConfig(LOGGING_DIC)  # 导入上面定义的logging配置 固定不变
        logger = logging.getLogger('ATM日志')  # 生成一个log实例
        logger.debug(n)  # 记录该文件的运行状态 比如存钱logger.info(n) 可以配置5个级别
    #[2019-07-06 22:35:37,315][MainThread:11308][task_id:ATM][common.py:104][INFO][11111111]
    
    # if __name__ == '__main__':
    #     load_my_logging_cfg(555)
    #     pass
    
    
    # logging.debug('debug message')#10调试模式 括号里面是提示
    # logging.info('info message')#20正常模式
    # logging.warning('warning message')#30警告模式
    # logging.error('error message')#40错误信息 ERROR
    # logging.critical('critical message')#50严重错误信息
    
  • 相关阅读:
    HDU2363 最短路+贪心
    stl-----map去重,排序,计数
    STL------sort三种比较算子定义
    栈------表达式求值
    踩水坑系列一
    第一周 动态规划Dynamic Programming(一)
    模拟递归回溯贪心专题入门
    HDU1013,1163 ,2035九余数定理 快速幂取模
    HDU1005 找规律 or 循环点 or 矩阵快速幂
    入门基础常识
  • 原文地址:https://www.cnblogs.com/saoqiang/p/12177139.html
Copyright © 2011-2022 走看看