美文网首页
python模块之日志模块-logging

python模块之日志模块-logging

作者: 每天进步一点点变成更好的自己 | 来源:发表于2024-03-02 10:09 被阅读0次

    python模块之日志模块-logging

    logging模块简介:日志的作用、等级和常用函数

    1、日志的作用

    日志的作用:

    • 程序调试
    • 了解程序运行是否正常
    • 故障分析与问题定位
    • 用户行为分析

    2、logging模块简介:日志的等级

    • DEBUG:最详细的日志信息,场景:问题诊断。
    • INFO:通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作。
    • WARNING:当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但此时应用程序还是正常的。
    • ERROR:由于一个更严重的问题导致某些功能不能正常运行时记录的信息。
    • CRITICAL:当发生严重错误,导致应用程序不能继续运行时记录的信息。

    3、logging模块简介:日志常用函数

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

    logging模块定义常用函数:

    logging.debug(msg,*args,**kwargs) 创建一条严重级别为DEBUG的日志记录
    logging.info(msg,*args,**kwargs) 创建一条严重级别为INFO的日志记录
    logging.warning(msg,*args,**kwargs) 创建一条严重级别为WARNING的日志记录
    logging.error(msg,*args,**kwargs) 创建一条严重级别为ERROR的日志记录
    logging.critical(msg,*args,**kwargs) 创建一条严重级别为CRITICAL的日志记录
    logging.log(level,*args,**kwargs) 创建一条严重级别为level的日志记录
    logging.basicConfig(**kwargs) 对root logger进行一次性配置
    

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

    logger :日志器,提供应用程序代码直接使用的接口
    handlers:处理器,用于将日志记录发送到指定的目的位置
    filters :过滤器,提供更细粒度的日志过滤功能,用于决定哪些日志记录将会被输出(其他的日志记录将会被忽略)
    formatters :格式器,用于控制日志信息的最终输出格式
    

    4、logging模块简介:logging

    (1)logging下常用的函数

    logger.setLevel() :设置日志等级
    logger.addHandler()和logger.removeHandler() :添加和删除一个Handler。
    logger.addFilter() :添加一个filter,起过滤作用。
    logger.Handler() :Handler基于日志级别对日志进行分发。
    

    Logger 持有日志记录器的方法,日志记录器不直接实例化,而是通过模块级函数 logging.getlogger (name) 来实例化,使用相同的名称多次调用 getLogger() 总是会返回对相同 Logger 对象的引用。
    Logger 应用程序代码能直接调用日志接口。
    Logger 最常用的操作有两类:配置和发送日志消息。
    初始化 logger = logging.getLogger(“endlesscode”),获取 logger 对象,getLogger() 方法后面最好加上所要日志记录的模块名字,配置文件和打印日志格式中的 %(name)s 对应的是这里的模块名字,如果不指定 name 则返回 root 对象
    logger.setLevel(logging.DEBUG),Logging 级别 NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL,日志会记录设置级别以上的日志。
    多次使用相同的 **name **调用 getLogger 方法返回同一个 logger 对象。
    Logger 是一个树形层级结构,在使用接口 debug,info,warn,error,critical 之前必须创建 Logger

    实例:
    创建方法:创建 Logger 实例后,可以使用以下方法进行日志级别设置,增加处理器 Handler
    logger = logging.getLogger(logger_name)
    logger.setLevel(logging.ERROR) # 设置日志级别为 ERROR,即只有日志级别大于等于 ERROR 的日志才会输出
    logger.addHandler(handler_name) # 为 Logger 实例增加一个处理器
    logger.removeHandler(handler_name) # 为 Logger 实例删除一个处理器
    

    (2)format常用格式

    %(levelno)s :打印日志级别的数值。
    %(levelname)s :打印日志级别的名称。
    %(pathname)s :打印当前执行程序的路径,相当于sys.argv[0]。
    %(filename)s :打印当前执行程序名。
    %(funcName)s :打印日志的当前函数。
    %(lineno)d:打印日志的当前行号。
    %(asctime)s :打印日志的时间。
    %(thread)d :打印线程ID。
    %(threadName)s :打印线程名称。
    %(process)d :打印进程ID。
    %(message)s :打印日志信息。
    

    5、logging.basciConfig()函数说明

    image.png image.png

    实例:

    import logging
    my_format = '%(asctime)s-%(filename)s-%(module)s-%(lineno)d'
    
    logging.basicConfig(
        filename='my.log',
        level= logging.INFO,
        format= my_format
    )
    
    logging.info('infor')
    logging.debug('debug')
    logging.warning('warning')
    logging.error('error')
    logging.critical('critical')
    

    执行后my.log内容如下:

    2023-02-02 08:16:34,391-test.py-test-243
    2023-02-02 08:16:34,392-test.py-test-245
    2023-02-02 08:16:34,392-test.py-test-246
    2023-02-02 08:16:34,392-test.py-test-247
    

    6、logging四大组件详解

    logger :日志器,提供应用程序代码直接使用的接口
    handlers:处理器,用于将日志记录发送到指定的目的位置
    filters :过滤器,提供更细粒度的日志过滤功能,用于决定哪些日志记录将会被输出(其他的日志记录将会被忽略)
    formatters :格式器,用于控制日志信息的最终输出格式

    示例:

    import logging
    import logging.handlers
    import datetime
    
    logger =logging.getLogger('__name__')#返回的是logger对象,_ _name _ _代表当前py文件名称。
    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-%(levelname)s-%(message)s"))
    
    f_handler = logging.FileHandler('error.log')
    f_handler.setLevel(logging.ERROR)
    f_handler.setFormatter(logging.Formatter("%(asctime)s-%(filename)s-%(module)s-%(lineno)d"))
    
    logger.addHandler(rf_handler)
    logger.addHandler(f_handler)
    
    logger.info('infor0123')
    logger.debug('debug0123')
    logger.warning('warning0123')
    logger.error('error0123')
    logger.critical('critical0123')
    
    直接执行如上代码,error.log展示的结果:
    2023-02-03 08:25:22,754-test.py-test-268
    2023-02-03 08:25:22,754-test.py-test-269
    
    直接执行如上代码,all.log展示的结果:
     2023-02-03 08:28:24,455-INFO-infor0123
     2023-02-03 08:28:24,455-DEBUG-debug0123
     2023-02-03 08:28:24,455-WARNING-warning0123
     2023-02-03 08:28:24,455-ERROR-error0123
     2023-02-03 08:28:24,455-CRITICAL-critical0123
    
    image.png

    Handler类


    image.png

    Handler相关子类:


    image.png

    相关文章

      网友评论

          本文标题:python模块之日志模块-logging

          本文链接:https://www.haomeiwen.com/subject/rmirhdtx.html