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

    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严重错误信息
    
  • 相关阅读:
    如何通过命令行窗口查看sqlite数据库文件
    eclipse自动补全的设置
    文本装饰
    注释和特殊符号
    文本装饰
    网页背景
    通过ArcGIS Server admin 查看和删除已注册的 Web Adaptor
    通过 ArcGIS Server Manager 查看已安装的 Web Adaptor
    通过 ArcGIS Server Manager 验证 DataStore
    Windows上安装ArcGIS Enterprise——以 Windows Server 2012 R2上安装 ArcGIS 10.8为例
  • 原文地址:https://www.cnblogs.com/saoqiang/p/12388612.html
Copyright © 2011-2022 走看看