Logging(日志模块)
为什么要使用log?
-
log是为了排错
-
log是用来做数据分析
-
购物商城:----数据库里
- 什么时间购买了什么商品
- 把那些商品加入购物车了
logging用途
- 用来记录用户的行为(用来做数据分析的内容,一般不放在数据库)
- 一个用户在什么时间什么地点登录了购物程序
- 浏览(搜索)了哪些信息,什么时间被展示出来了
- 什么时候关闭了软件
- 对哪些商品感兴趣。。。等等
- 用来记录用户的行为 ----操作审计
- 记录对文件或功能的操作
- 排查代码中的错误
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))