• logging模块


    功能完善的日志模块

     

     

    logging 模块.py

    import logging

    # 1.日志的级别
    # logging.debug("这是一个调试信息") # 10
    # logging.info("常规信息") # 20
    # logging.warning("警告信息") # 30
    # logging.error("错误信息") # 40
    # logging.critical("严重错误") # 50
    # 在logging模块中有对应的常量用来标识级别
    # 默认情况下 默认的级别30 WARNING 日志输出位置是控制台

    # 2.自定定义日志的配置
    # logging.basicConfig(
    # filename="a.log",
    # filemode="at",
    # level=10,
    # format="%(asctime)s %(levelname)s %(funcName)s %(lineno)s %(message)s",
    # datefmt="%Y-%m-%d %X %p"
    # )
    #
    # logging.debug("这又是调试信息")


    # 日志模块的四个核心角色
    """
    1.logger 日志生成器
    2.filter 过滤器
    3.handler 处理器
    4.formatter 格式处理器
    """

    # 1.创建一个日志生成器
    # mylog = logging.getLogger("mylog")
    # # 设置生成器级别
    # mylog.setLevel(logging.DEBUG)
    #
    # # 2.搞一个日志处理器
    # fh = logging.FileHandler("b.log",encoding="utf-8")
    #
    # # 3.搞一个格式处理器
    # fm = logging.Formatter(
    # "%(asctime)s %(levelname)s %(funcName)s %(lineno)s %(message)s",
    # datefmt="%Y-%m-%d %X %p")
    #
    # # 4.将 三个对象进行关联
    # mylog.addHandler(fh)
    # fh.setFormatter(fm)
    # # 测试
    # mylog.debug("mylog 的 测试!")



    # # 日志的继承
    # log1 = logging.getLogger("father")
    # log2 = logging.getLogger("father.son")
    # log3 = logging.getLogger("father.son.grandson")
    #
    # # 默认值True 标识 有继承关系 当子的日志产生日志时 给他父级以及父级以上都发一份
    # # 如果不需要就设置False
    # # log3.propagate = False
    #
    # fh = logging.FileHandler("c.log",encoding="utf-8")
    #
    # fm = logging.Formatter(
    # "%(asctime)s %(levelname)s %(funcName)s %(lineno)s %(message)s",
    # datefmt="%Y-%m-%d %X %p")
    #
    #
    # log1.addHandler(fh)
    # log2.addHandler(fh)
    # log3.addHandler(fh)
    #
    # fh.setFormatter(fm)
    #
    #
    # # log1.warning("father log")
    # # log2.warning("father.son log")
    # log3.warning("father.son.grandson log")

    import logging.config
    # 以字典来配置日志 传入一个字典对象 就不需要在编写上面那一堆代码
    # logging.config.dictConfig()




    # 流处理器
    log1 = logging.getLogger("a")
    # 输出到文件
    fh = logging.FileHandler("c.log",encoding="utf-8")
    # 输出到控制台
    sh = logging.StreamHandler()

    log1.addHandler(sh)
    log1.addHandler(fh)
    fm = logging.Formatter(
    "%(asctime)s %(levelname)s %(funcName)s %(lineno)s %(message)s",
    datefmt="%Y-%m-%d %X %p")
    sh.setFormatter(fm)

    log1.warning("测试2!")


    import lib.common
    logger = lib.common.get_logger()

    def login():
    logger.debug("测试 测试!")

    login()
    ***********************************************************************

    loggings.py
    standard_format = "%(name)s %(asctime)s %(levelname)s %(module)s %(funcName)s %(lineno)s %(message)s"
    simple_format = "%(name)s %(asctime)s %(module)s %(message)s"
    complete_format = "%(asctime)s %(levelname)s %(funcName)s %(lineno)s %(thread)s %(process)s %(message)s"
    logfile_path = r"D:上海python全栈4期day22代码logd.log"

    LOGGING_DIC = {
    'version': 1,
    'formatters': {
    'standard': {
    'format': standard_format
    },
    'simple': {
    'format': simple_format
    },
    "complete":{
    "format": complete_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, # 日志文件的最大大小为5M 超出后 换文件
    'backupCount': 5, # 最多留五个日志文件
    'encoding': 'utf-8',
    },
    },
    'loggers': {
    # 在getLogger的时候 如果指定的名称 不存在 或者不给名称 用的就是默认的
    # 在这里如果key为空 它就是默认的
    # 你可以自己定义生成器的名称 并且他们还能使用相同的默认配置
    '': {
    'handlers': ['default', 'console'],
    'level': 'DEBUG',
    'propagate': False,
    },
    },
    }


    *****************************************************************************

    common.py

    import conf.settings
    import logging.config

    def get_logger():
    logging.config.dictConfig(conf.settings.LOGGING_DIC)
    return logging.getLogger("sasasasa")

    *********************************************************************************




  • 相关阅读:
    Git命令与使用
    Android与WebView的JS交互
    Android 中关于硬件加速的使用和问题
    Activity-生命周期和启动模式
    Activity-恢复与保存状态或数据
    Android中Paint的一些使用心得记录
    Java中sleep,wait的区别
    C#基本类型
    LeetCode74 搜索二维矩阵
    leetcode 43 字符串相乘 java
  • 原文地址:https://www.cnblogs.com/frank007/p/9809959.html
Copyright © 2020-2023  润新知