Logging(日志模块)

为什么要使用log?

  • log是为了排错

  • log是用来做数据分析

  • 购物商城:----数据库里

    • 什么时间购买了什么商品
    • 把那些商品加入购物车了

logging用途

  1. 用来记录用户的行为(用来做数据分析的内容,一般不放在数据库)
    1. 一个用户在什么时间什么地点登录了购物程序
    2. 浏览(搜索)了哪些信息,什么时间被展示出来了
    3. 什么时候关闭了软件
    4. 对哪些商品感兴趣。。。等等
  2. 用来记录用户的行为 ----操作审计
    1. 记录对文件或功能的操作
  3. 排查代码中的错误

logging等级

import logging

# 输出内容是有等级的:默认处理warning等级以上的信息
logging.debug('debug messages')  #调试
logging.info('info messages')    #信息
logging.warning('warning messages')  #警告
logging.error('error messages')       #错误
logging.critical('critical messages') #批判性的

# WARNING:root:warning messages
# ERROR:root:error messages
# CRITICAL:root:critical messages

logging打印格式(输出到屏幕)

  • asctime时间 name:用户

    levelname:日志等级 module:程序里面那个文件

    messages:要打印的信息 lineno第几行代码打印的信息

  • 问题:不能写中文,否则乱码或者文件显示不出来

import logging
logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s[%(lineno)d] - %(module)s: %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S',
)

logging.warning('warning messages test1')
logging.error('error messages test2')
logging.critical('critical messages test3')

# 2021-05-10 17:55:25 - root - WARNING[9] - b1: warning messages test1
# 2021-05-10 17:55:25 - root - ERROR[10] - b1: error messages test2
# 2021-05-10 17:55:25 - root - CRITICAL[11] - b1: critical messages test3

logging打印格式(输出到文件)

  • 问题:不能写中文,否则乱码或文件显示不出来
import logging
logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s[%(lineno)d] - %(module)s: %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S',
    filename='tmp.log',
    level=logging.DEBUG
)
#要打印的信息中不能有中文,否则文件显示不出来
logging.debug('debug  test1')
logging.info('info  test1')
logging.warning('warning messages test1')
logging.error('error messages test2')
logging.critical('critical messages test3')

logging打印格式(同时输出到屏幕和文件)

  • 解决了以上打印信息不能写中文的问题
import logging
fh=logging.FileHandler('tmp.log',encoding='utf-8')
#fh2=logging.FileHandler('tmp2.log',encoding='utf-8')   #将fh2添加到handlers中(将打印的信息添加到不同的文件中)
sh=logging.StreamHandler()    #将打印结果显示到屏幕
# 将sh和fh添加到下面handlers中
logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s[%(lineno)d] - %(module)s: %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S',
    level=logging.DEBUG,
    handlers=[fh,sh]
    #handlers=[fh,sh,sh2]
)

logging.debug('debug 信息 test1')
logging.info('info 信息 test1')
logging.warning('warning messages test1')
logging.error('error messages test2')
logging.critical('critical messages test3')

日志切割

  • handlers.RotatingFileHandler 按文件大小切割
  • handlers.TimedRotatingFileHandler 按时间切割
from logging import handlers
import logging
import time

# backupCount:备份(保留文件的备份个数)  maxBytes:字节
rh=handlers.RotatingFileHandler('myapp.log',maxBytes=1024,backupCount=5)  #按照大小进行切割
#  when:时间单位     interval:间隔时长      encoding:编码格式
fh=handlers.TimedRotatingFileHandler(filename='x2.log',when='s',interval=5,encoding='utf-8',backupCount=5) #按照时间进行切割

logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s[%(lineno)d] - %(module)s: %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S',
    level=logging.DEBUG,
    handlers=[fh,rh]
)


for i in range(1,100000):
    time.sleep(1)
    logging.error('KeyboardInterrupt error %s' %str(i))

posted @ 2021-06-04 19:05  刘家小仙女  阅读(912)  评论(0编辑  收藏  举报