python学习day29 configparse logging模块
configparse模块
http://www.cnblogs.com/Eva-J/articles/7228075.html#_label13
处理配置文件的模块,但是格式有严格的要求:
[DEFAULT] ServerAliveInterval = 45 Compression = yes CompressionLevel = 9 ForwardX11 = yes [bitbucket.org] User = hg [topsecret.server.com] Port = 50022 ForwardX11 = no
用python生成这样一个文件,保存成.ini格式
import configparser config = configparser.ConfigParser() config["DEFAULT"] = {'ServerAliveInterval': '45', 'Compression': 'yes', 'CompressionLevel': '9', 'ForwardX11':'yes' } config['bitbucket.org'] = {'User':'hg'} config['topsecret.server.com'] = {'Host Port':'50022','ForwardX11':'no'} with open('example.ini', 'w') as configfile: config.write(configfile)
logging模块
日志模块
import logging logging.debug('debug message') # 低级别的 # 排错信息 logging.info('info message') # 正常信息 logging.warning('warning message') # 警告信息 logging.error('error message') # 错误信息 logging.critical('critical message') # 高级别的 # 严重错误信息
默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG),默认的日志格式为日志级别:Logger名称:用户输出消息。
用logging.basicConfig规范日志的记录信息:
import logging logging.basicConfig(level=logging.WARNING, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', # 日期 filename='test.log', # 写入的文件名称 filemode='a') # 追加写入 try: int(input('num >>')) except ValueError: logging.error('输入的值不是一个数字') logging.debug('debug message') # 低级别的 # 排错信息 logging.info('info message') # 正常信息 logging.warning('warning message') # 警告信息 logging.error('error message') # 错误信息 logging.critical('critical message') # 高级别的 # 严重错误信息
当尝试输入的值不是int类型时,记录错误'输入的值不是一个数字'
logging.basicConfig的具体用法看eva老师的博客
basicconfig 简单 能做的事情相对少,因为:①中文的乱码问题,②不能同时往文件和屏幕上输出
配置log对象
稍微有点复杂 能做的事情相对多
import logging logger = logging.getLogger() # 创建一个Logger对象 fh = logging.FileHandler('log.log', encoding='utf-8') # 创建一个handler对象,用于写入日志文件 sh = logging.StreamHandler() # 再创建一个handler对象,用于输出到控制台 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # 格式化 formatter2 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s [line:%(lineno)d] : %(message)s') # 文件操作符 和 格式关联 fh.setFormatter(formatter) sh.setFormatter(formatter2) # logger 对象 和 文件操作符 关联 logger.addHandler(fh) logger.addHandler(sh) logging.debug('debug message') # 低级别的 # 排错信息 logging.info('info message') # 正常信息 logging.warning('警告错误') # 警告信息 logging.error('error message') # 错误信息 logging.critical('critical message') # 高级别的 # 严重错误信息
既写入文件又输出到控制台