logging用于编写一个简单的日志系统是很不错的,简单易懂。
先上一段代码再详细说明:
import logging
import os
if not os.path.exists('E:\\Python\数据库\错误日志.txt'):
with open('错误日志.txt', 'w', encoding='utf8') as f:
f.write('错误日志:' + '\n')
f.close()
logger = logging.getLogger('lml')
logger.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)s - %(asctime)s - %(filename)s - [line:%(lineno)d] - %(levelname)s - %(message)s')
fh = logging.FileHandler('错误日志.txt', encoding='utf-8')
fh.setFormatter(formatter)
fh.setLevel(logging.WARNING)
ch = logging.StreamHandler()
ch.setFormatter(formatter)
ch.setLevel(logging.INFO)
logger.addHandler(fh)
logger.addHandler(ch)
# logging.basicConfig(level=logging.INFO,
# format='%(asctime)s - %(filename)s - [line:%(lineno)d] - %(levelname)s - %(message)s',
# filename='错误日志.txt')
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')
代码里面第一段的os可以忽略不计,完全是强迫症想要去弄一个自动生成的存储文件。
说到logging最简单的就是最后的logging输出,但是肯定还要外加一行代码
logger.exception('wtf')
这一行才是最关键的东西,可以像try.....exception.....一样输出错误,这样方便解决问题了。
logger最开始的定义就像数据的cursor一样,你要把输出的命令传递给它,它作为一个中转最后执行。
后面的formatter设置了输出的样式:
这里有两个setLevel是相当于在logger的时候进行了一次输出筛选,后面handler的时候又进行了一次筛选,输出最后的筛选为结果。
而优先级来说是debug
最后提一下handler,似乎是大家默认的fh == FileHandler, ch == StreamHandler,其实一个是输出进文档,一个是显示出来自己实时查看。
logger.addHandler是加上这个操作
logger.removeHandler是删除这个操作
实话还有一个listen功能,等我学习后再贴出来
再贴一个datefmt格式,参考:time.strftime