Python logging日志模块

  程序都离不开日志,网站更离不开:注册、登陆、访问等各种操作都离不开。

  Python中也有日志模块,使用很方便。

  import logging

  import logging.config

  

logging模块的四个对象:

  logger对象:负责产生日志

  filter对象: 负责过滤日志

  handler对象:负责日志产生的位置

  formatters对象:负责日志的格式

 

用法:

  1、 生成日志对象:logger = logging.gerLogger('XXX')

  2、生成日的位置:文件、终端等

    hd1 = logging.Filehandler('filepath.log',encoding='utf-8')

    hd2 = logging.Filehandler('filepath2.log',encoding='utf-8') # 第二个文件

    hd3 = logging.streamhandler() #产生在终端

  3、设定日志格式

    fm1 = logging.Formatter(fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',datefmt='%Y-%m-%d %H:%M:%S %p',)

    fm2 = logging.Formatter(fmt='%(asctime)s - %(name)s %(message)s',datefmt='%Y-%m-%d',)

  4、绑定handler对象:可以有多个 handler对象

    logger.addHandler(hd1)

    logger.addHandler(hd2)

    logger.addHandler(hd3)

  5、绑定formatter对象:同一个formatter对象可以绑定给多个 handler对象

    hd1.setFormatter(fm1)

    hd2.setFormatter(fm1)

    hd3.setFormatter(fm3)

  6、设置日志等级:

    logger.setLevel(30)

    日志等级主要有:dubegger(10),info(20),warning(30),error(40),criticll(50) 一般记录30以上的级别

  7、记录日志:

    logger.debug('abc def')

 

配置日志字典:

  

    import logging

    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'

    logfile_path = 'a3.log'

    # 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)传递

    }, # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置

    },

    }

 

    # 使用配置字典

    logging.config.dictConfig(LOGGING_DIC) # 自动加载字典中的配置

    logger1 = logging.getLogger('xxx')

    logger1.debug('好好的 不要浮躁 努力就有收获')

 

 

posted on 2021-11-29 21:40  秋不语  阅读(65)  评论(0)    收藏  举报

导航