• python常用模块-logging模块


    logging模块 -日志处理模块

    1.日志级别

     critical    对应数字50     严重,系统无法运行  

     error       对应数字40    错误,系统报错

     warning  对应数字30    警告,需要注意的信息。系统正常中

     info    对应数字20   信息,正常信息   

     debug     对应数字10   调试,测试专用  

    2.使用的方式:

      a.日志打印到文件

      b.控制日志的级别

      c.控制日志的格式

    3.为logging模块指定全局配置,针对所有logging有效,控制打印到文件中

     

      

    可在logging.basicConfig()函数中通过具体参数来更改logging模块默认行为,可用参数有
    filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。
    filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
    format:指定handler使用的日志显示格式。 
    datefmt:指定日期时间格式。 
    level:设置rootlogger(后边会讲解具体概念)的日志级别 
    stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。


    format格式
    %(name)s:Logger的名字,并非用户名,详细查看
    
    %(levelno)s:数字形式的日志级别
    
    %(levelname)s:文本形式的日志级别
    
    %(pathname)s:调用日志输出函数的模块的完整路径名,可能没有
    
    %(filename)s:调用日志输出函数的模块的文件名
    
    %(module)s:调用日志输出函数的模块名
    
    %(funcName)s:调用日志输出函数的函数名
    
    %(lineno)d:调用日志输出函数的语句所在的代码行
    
    %(created)f:当前时间,用UNIX标准的表示时间的浮 点数表示
    
    %(relativeCreated)d:输出日志信息时的,自Logger创建以 来的毫秒数
    
    %(asctime)s:字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
    
    %(thread)d:线程ID。可能没有
    
    %(threadName)s:线程名。可能没有
    
    %(process)d:进程ID。可能没有
    
    %(message)s:用户输出的消息
    

     4.logging常用的使用

      a.常用的配置:   

      logging.basicConfig(filename='access.log',
                        format='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S %p',
                        level=10)

      b.常用的发生信息:

    5.logging 模块包含四种对象:logger,filter,handler,formatter

       logger对象负责产生日志

          filter负责过滤(通常写项目不需要设置)

       handler对象需要与logger对象绑定,负责接受logger对象传过来的日志,控制输出到哪里,是终端还是文件

       formatter对象需要与handler对象绑定,负责控制handler对象的日志格式。  

       

       使用步骤:1. logging.getLogger 产生logger对象 并setLevel设置级别

            2.logging.FileHandler产生处理文件对象或logging.StreamHandler 产生处理终端对象 .并建立logger对象和Handler对象的绑定关系

            3.logging.Formatter  产生格式化对象. 并建立Handler对象与Formatter对象的对应关系

            4.使用logger对象的debug、info等等函数产生日志信息。

        

       

      5.从字典中加载logging

        应用

        

    """
    logging配置
    """

    import os
    import logging.config

    # 定义三种日志输出格式 开始

    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.abspath(__file__)) # log文件的目录

    logfile_name = 'all2.log' # log文件名

    # 如果不存在定义的日志目录就创建一个
    if not os.path.isdir(logfile_dir):
    os.mkdir(logfile_dir)

    # log文件的全路径
    logfile_path = os.path.join(logfile_dir, logfile_name)

    # log配置字典
    LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
    'standard': {
    'format': standard_format
    },
    'simple': {
    'format': simple_format
    },
    },
    'filters': {},
    'handlers': {
    #打印到终端的日志
    'console': {
    'level': 'DEBUG',
    'class': 'logging.StreamHandler', # 打印到屏幕
    'formatter': 'simple'
    },
    #打印到文件的日志,收集info及以上的日志
    'default': {
    'level': 'DEBUG',
    'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
    'formatter': 'standard',
    'filename': logfile_path, # 日志文件
    '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():
    logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置
    logger = logging.getLogger(__name__) # 生成一个log实例
    logger.info('It works!') # 记录该文件的运行状态

    if __name__ == '__main__':
    load_my_logging_cfg()

    logging配置文件

        

  • 相关阅读:
    HDU 5058 So easy
    HDU 1392 Surround the Trees(几何 凸包模板)
    HDU 4500 小Q系列故事——屌丝的逆袭(简单题)
    HUD 5050 Divided Land
    HDU 5047 Sawtooth(大数优化+递推公式)
    http://www.rabbitmq.com/
    安装及运行 RabbitMQ 服务器 (linux) 失败! 安装erlang 失败,无法继续
    安装及运行 RabbitMQ 服务器 (windows)
    RabbitMQ client ( java )
    task:scheduled cron 合法
  • 原文地址:https://www.cnblogs.com/linbin7/p/10693124.html
Copyright © 2020-2023  润新知