前言:为什么要写log日志?
1.为了排错
2.用于数据分析
一、logginz模块常用用途:
1.记录用户的行为 - 数据分析
2.记录用户的行为 - 操作审计
3.排查代码中的错误
二、logging输出的内容是有等级的(升序),默认处理warning级别以上的所有信息
logging.debug('debug msg') # 调试 logging.info('info msg') # 信息 logging.warning('warning msg') # 警告 logging.error('error msg') # 错误 logging.critical('critical msg') # 批判性的
三、可以通过灵活配置日志级别,日志格式,输出位置等参数,使打印的日志更清晰易懂
当我们只想将日志输出到屏幕时:
import logging
logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s[%(lineno)d] -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p',
level=logging.DEBUG # 因为默认只输出warning级别以上,所以在这里我们可以增加日志输出的级别
)
# 输出到屏幕:
logging.debug('debug msg test')
logging.warning('warning msg test')
logging.error('error msg test')
我们更多的是想要将日志写入文件:
# 输出到文件中并且设置可写入的等级:默认追加形式
import logging
logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s[%(lineno)d] -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', filename='temp.log', # 在这里定义要写入的文件名,默认为当前路径 level=logging.DEBUG ) logging.debug('debug msg 调试 test') logging.warning('warning 警告 msg test') logging.error('error msg 错误 test') logging.critical('critical msg 批判 test')
当你写入文件后,你发现文件中竟然会出现乱码,所以必须解决这个问题。
而同时你又想同时输入多个文件时:
# 同时向多个文件输入并解决乱码问题 和 向屏幕输出 import logging
fh = logging.FileHandler('temp.log', encoding='utf-8') # 文件1 fh2 = logging.FileHandler('temp2.log', encoding='utf-8') # 文件2 sh = logging.StreamHandler() # 向屏幕输出 logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s[%(lineno)d] -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', level=logging.DEBUG, handlers=[fh, fh2, sh] # 添加文件1、文件2、向屏幕输出的变量名 ) logging.debug('debug msg 调试 test') logging.warning('warning 警告 msg test') logging.error('error msg 错误 test') logging.critical('critical msg 批判 test')
四、日志的拆分
import time from logging import handlers # 按时间切分 fh = handlers.TimedRotatingFileHandler(filename='time_split.log', when='s', interval=5, encoding='utf-8') # 按大小切分 rh = handlers.RotatingFileHandler('room_split.log', maxBytes=1012, backupCount=5) # 输出到屏幕 sh = logging.StreamHandler() logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s[%(lineno)d] -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', level=logging.DEBUG, handlers=[fh, rh, sh] ) for i in range(30): time.sleep(1) logging.debug('debug msg 调试 test') logging.warning('warning 警告 msg test') logging.error('error msg 错误 test') logging.critical('critical msg 批判 test')