chzhiyi / -KnowledgeShare

6 stars 1 forks source link

20190408 - 使用logging模块设置Python日志 - jingchu #47

Open qingfengmingjian opened 5 years ago

qingfengmingjian commented 5 years ago

日志模块 为什么要写日志

一个卡务系统 : 记录时间 地点 金额
 谁在什么时候 删掉了某一个用户
#某时某刻登录了系统
#检测代码是不是像我们想像的这样执行的
写文件 ,输出到屏幕

时间格式,级别控制,更加便捷
logging模块不能自动生成你需要的日志

logging模块的使用
     简单配置法      编码问题    logger对象法

使用basicConfig()方法

import logging
# logging.basicConfig(level=logging.DEBUG,
#                     format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
#                     datefmt='%a, %d %b %Y %H:%M:%S')
#
# logging.debug('debug message')      # 调试
# logging.info('info message')        # 普通信息
# logging.warning('warning message')  # 警告
# logging.error('error message')      # 错误信息
# logging.critical('critical message')# 严重错误

# 默认情况下 不打印warning以下级别的信息
# 1.中文显示乱码
# 2.不能同时输出到文件和屏幕

拆解操作步骤
logger对象的方式来使用logging模块
首先 先创建logger对象
第二 创建一个文件操作符
第三 创建一个屏幕操作符
第四 创建一个输出格式

第五 logger 绑定 文件操作符
第六 logger 绑定 屏幕操作符
第七 文件操作符 绑定格式
第八 屏幕操作符 绑定格式

代码
import logging
# 用logger
# 首先 先创建logger对象
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)#信息记录的一个层级
# 第二 创建一个文件操作符
 filename = 'D://log.txt'
fh = logging.FileHandler('log',encoding='utf-8')

# 第三 创建一个屏幕操作符
sh = logging.StreamHandler()

# 第四 创建一个格式
fmt = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')#运行的时间,哪个程序,信息级别,信息内容

# logger 绑定 文件操作符
logger.addHandler(fh)
# logger 绑定 屏幕操作符
logger.addHandler(sh)
# 文件操作符 绑定格式
fh.setFormatter(fmt)
# 屏幕操作符 绑定格式
sh.setFormatter(fmt)

logger.debug('logger debug message')
logger.info('logger info message')
logger.warning('logger warning message')
logger.error('logger error message')
logger.critical('logger critical message')