zoukankan      html  css  js  c++  java
  • logging- 日志记录

    https://www.cnblogs.com/yyds/p/6901864.html

    logging提供给了两种记录日志的方式:

    第一种方式是使用logging提供的模块级别的函数

    import logging 

    logging.basicConfig(filename='my.log',level=logging.DEBUG,format='%(asctime)s-%(process)d - %(levelname)s - %(message)s ',datefmt='%m/%d/%Y %H:%M:%S %p')

    logging.debug("this is a debug log")

    logging.info("this is a info log.")

    logging.error("this is %d warning  %s log",10,'tom')

    basicConfig()是一个日志系统的简单配置工具,只有在第一个调用该函数时会起作用

    第二种方式是使用logging日志系统的四大组件

    日志系统的四大组件:

    Logger            日志器               日志记录的接口

    Handler          处理器               设置日记的输出的位置,比如文件,控制台,网路等

    Filter             过滤器                个性化日志记录结果的 过滤  ,关于filter有方法                addFilter()    ,      removeFilter()

    Formatter      格式器                设置日志记录的格式       

    Logger就像一个带名字的容器,logger.addHandler(handl1),这样就启用了处理器1   handl1的日志处理器,removeHandler(handl1)可以移除一个处理器

    Handler可通过 handl1.setLevel(logging.DEBUG)    , handl1.setFormatter(fomat1),handl1.addFilter(filter1) 设置日志记录的等级和格式,过滤规则

    获取一个logger对象,可以通过logging.getLogger(name)获取对应name的标识,默认为‘root',若以相同的name多次调用getLogger()方法,将会返回同一个logger对象

    logger对象创建后,可以通过logger.debug(),logger.info(),logger.warning(),logger.error(),logger.critical(),logger.expection()来记录对应等级的日志,

    logger.expection()与logger.error()等级一致,只是expection()会记录错误栈

    创建handler对象:

    logging.StreamHandler()                                                 将日志输出到控制台

    logging.FileHandler(filername,encoding='utf-8')            将日志输出到指定磁盘文件,默认文件大小无限增长

    logging.handlers.RotatingFileHandler                              输出到文件,支持按日志大小切割

    logging.handlers.TimedRotatingFileHandler                    输出到文件,支持按时间切割

    logging.handlers.HTTPHandler                                        输出到http服务器,以get或post方式发送

    logging.handlers.SMTPHandler                                        输出到指定的email地址

    logging.NullHandler                                                          一个空的handler

    日志流程

    logger作为一个容器也有setLevel() , addFilter()方法,日志先 由 logger 进,总流路径,满足了 logger的level和filter等级才会继续流向 各个分流 Handler

    在某分流上,满足这个handler的level和filter的日志 才会输出到handler对应的位置  .; 满足了logger的level和filter的要求的日志同时还会根据propagate的值来判断是否会将消息传给父级logger

    import logging

    import logging.handlers

    import datetime

    logger = logging.getLogger('mylogger')

    logger.setLevel(logging.DEBUG)

    rf_handler = logging.handlers.TimedRotatingFileHandler('all.log', when='midnight', interval=1, backupCount=7, atTime=datetime.time(0, 0, 0, 0))

    rf_handler.setFormatter(logging.Formatter("%(asctime)s -%(process)d - %(levelname)s - %(message)s"))

    f_handler = logging.FileHandler('error.log')

    f_handler.setLevel(logging.ERROR)

    f_handler.setFormatter(logging.Formatter("%(asctime)s - %(process)d-%(levelname)s - %(filename)s[:%(lineno)d] - %(message)s"))

    logger.addHandler(rf_handler)

    logger.addHandler(f_handler)

    logger.debug('debug message')

    logger.info('info message')

    logger.warning('warning message')

    logger.error('error message')

    logger.critical('critical message')

  • 相关阅读:
    C语言提高代码效率的几种方法
    如何写出高效率稳定的单片机代码
    位运算之 C 与或非异或
    C语言中位运算符异或“∧”的作用
    位运算之——按位与(&)操作——(快速取模算法)
    案例分析
    2018年春季个人阅读计划
    《我们应当怎样做需求分析》读书笔记
    寒假——练车、脑力风暴和辅导初中生
    需求工程:软件建模与分析 读书笔记三
  • 原文地址:https://www.cnblogs.com/Ting-light/p/9512851.html
Copyright © 2011-2022 走看看