python logging日志模块学习

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

你可能感兴趣的:(Python)