什么是日志
无处不在的
所有的程序必须记录日志
给用户看的
购物软件
视频软件
银行卡
给内部人员看的
给技术人员看的
计算器
500个表达式
一些计算过程,或者是一些操作过程需要记录下来
程序出现bug的时候,来帮助我们记录过程 排除错误
给非技术人员看的
学校,公司的软件
谁在什么时候做了什么事儿,删除操作
class Student:
def __init__(self, name):
self.name = name
def select_course(self):
print('Succussful Choose Class')
with open('log', 'a', encoding='utf-8') as f:
f.writer('%s : %s选课成功' % (time.strftime('%H-%M-%S'), self.name, 'python'))
# 自己写的一条日志,太麻烦,每次都要打开文件,写入内容,所以有了logging模块
laura = Student('laura')
laura.select_course() # 已经写入了log文件,谁在什么时间登陆
import logging # 帮助我们以规范的形式和规范的格式或者写文件的一些信息
logging.basicConfig(level=logging.INFO) # 都是在文件中写入信息,但是是分等级的,可以通过不同等级的信息来分析产品或用户记录
logging.debug('debug message') # 计算或者工作的细节,正常的信息默认不显示,所以有了简单配置
logging.info('info message') # 记录一些用户的增删改查的操作
logging.warning('input a string type') # 警告操作
logging.error('error message') # 错误操作
logging.critical('critical message') # 批判的 直接导致程序出错退出的
>>>
INFO:root:info message # 格式:等级:用户:操作(打印什么就是什么)
WARNING:root:input a string type
ERROR:root:error message
CRITICAL:root:critical message
简单配置
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',
filename='test.log',
filemode='w')
logging.warning('input a string type')
logging.error('EOF ERROR') # 警告操作
>>> # test.log文件中的内容
Mon, 10 Sep 2018 21:05:10 3, logging i.py[line:57] WARNING input a string type
Mon, 10 Sep 2018 21:05:10 3, logging i.py[line:58] ERROR EOF ERROR
等级可以配置,可以控制哪些消息显示哪些不显示,默认从warning开始显示,
可以控制输出的格式,如增加时间
报错的行数,如在哪一行出错
一次配置,格式不用改了,就改输入的内容以及要打印的等级。
当配置了filename时,会把下面两句都写进filename文件中。但是如果要把中文写进文件中,简单配置是不行的,不能知道编码,没有给定这个参数。对象配置可以
对象的配置
帮助解决中文问题
basicconfig要么往文件打,要么往屏幕输出,但是他不能既往文件打又往屏幕输出。
配置过程非常复杂,但十分灵活,可以自由配置
先创建一个log对象 : logger,绑定文件操作符,屏幕操作符
还要创建一个控制文件输出的文件操作符,绑定一个格式
还要创建一个控制屏幕输出的屏幕操作符,绑定一个格式
要创建一个格式
import logging
logger = logging.getLogger() # 创建一个logging对象
logger.setLevel(logging.DEBUG) # 设置显示等级,从debug开始输出了
# 创建一个控制文件输出的文件操作符
fh = logging.FileHandler('mylog.log') # 输出的文件可以改
fh2 = logging.FileHandler('mylog2.log') # 除了输入到mylog里,还会输出到mylog2中
sh = logging.StreamHandler()
fmt = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # 配置已经固定好了修改时可以按照需求修改就行了
fmt2 = logging.Formatter('%(asctime)s - %(name)s[line:%(lineno)d] - %(levelname)s - %(message)s')
fh.setFormatter(fmt)
sh.setFormatter(fmt2)
sh.setLevel(logging.WARNING) # 回到warning,如果不想在屏幕输出debug的话
logger.addHandler(sh)
logger.addHandler(fh)
logger.addHandler(fh2)
logger.debug('debug message')
logger.info('info message')
logger.warning('input a string type')
logger.error('error message')
logging.critical('critical message')
logging 日志模块
猜你喜欢
转载自blog.csdn.net/weixin_42233629/article/details/82596632
今日推荐
周排行