今日所学:
logging模块
操作日志的模块
日志:日常的流水,将程序运行过程中的状态或数据进行记录,一般都是记录到日志文件中
在正常的项目中,项目运行的一些打印信息,采用looging打印到文件中,这个过程就称之为 记录日志
可在logging.basicConfig()函数中通过具体参数来更改logging模块默认行为,可用参数有
filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。
filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
format:指定handler使用的日志显示格式。
datefmt:指定日期时间格式。
level:设置rootlogger(后边会讲解具体概念)的日志级别
日志就是记录日常流水,即日志文件
程序运行过程当中的数据,优化程序,跟好的服务用户
导入模块
import logging
输出日志
logging.info('info') # 常规信息 20
logging.debug("debug") # 调试信息 10
logging.warning("warning") # 警告信息 30
logging.error("error") # 错误信息 40
logging.critical("critical") # 严重错误 50 fatal一样
用数字来表示级别,数字越大级别越高 默认级别为warning,对应数字为30
五种打印级别信息,级别本身没有代表信息重要性,只表示它打印的给它附属的,没有实际意义
1,日志被打印到控制台
2,日志输出的格式为级别
3,日志生成器名称,日志消息
日志的配置:
loggin 四大成员
logging .basicConfig() 函数中通过具体参数来更改logging模块默认行为,可用参数有
1 新建打印者
logger=logging.getLogger('owen') 生成器 loggin.getLogger('日志对象1') #logger:产生日志的对象
2, 创建句柄:输出的位置
logger.critical('msg')
ster_hand = logging.StreamHandler() 控制台句柄 用一个名字接受控制台句柄
Handler:接收日志然后控制打印到不同的地方,FileHandler用来打印到文件中,StreamHandler用来打印到终端
a_file_hand = logging.FileHandler('a.log') 文件句柄 如果有中文 handler1 = logging.FileHandler("文件名1",encoding="utf-8")
b_file_hand = logging.FileHandler('b.log') 文件句柄 如果有中文 handler1 = logging.FileHandler("文件名2",encoding="utf-8")
3.打印者绑定句柄
logger.addHandler(ster_hand ) 绑定生成器
logger.addHandler(a_file_hand) 绑定文件句柄
logger.addHandler(b_file_hand) 绑定文件句柄
设置格式
fmt1 = logging.Formatter('%(asctime)s-%(msg)s') Formatter对象:可以定制不同的日志格式对象,然后绑定给不同的Handler对象使用,以此来控制不同的Handler的日志格式
fmt2 = logging.Formatter('%(asctime)s [%(name)s]-%(msg)s')
为句柄绑定输出格式
ster_hand.setFormatter(fmt1) 绑定格式化对象
a_file_hand.setFormatter(fmt1) 绑定格文件句柄
b_file_hand.setFormatter(fmt2) 绑定文件句柄
logger.critical('msg') 测试 及输出日志
logging.info('info') 常规信息 20
logging.debug("debug") 调试信息 10
logging.warning("warning") 警告信息 30
logging.error("error") 错误信息 40
logging.critical("critical")
1.配置
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'o_fmt1': {
'format': '%(name)s:%(asctime)s - %(message)s'
},
'o_fmt2': {
'format': '%(name)s:%(asctime)s [%(levelname)s] - %(message)s'
}
},
'filters': {},
'handlers': {
'o_cmd': {
'level': 'DEBUG', 控制台级别
'class': 'logging.StreamHandler', 控制台句柄
'formatter': 'o_fmt1' 控制台格式
},
'o_file': {
'level': 'WARNING', 文件中级别
'class': 'logging.handlers.RotatingFileHandler', 文件最多存的字节数
'formatter': 'o_fmt2', 文件格式
'filename': r'F:python8期课堂内容day20代码part4logging.log', 日志文件 路径
'maxBytes': 1024*1024*5, 日志大小 5M
'backupCount': 5, 日志文件最大个数
'encoding': 'utf-8', 日志文件的编码
}
},
'loggers': {
'o_owen': {
'level': 'DEBUG', 级别
'handlers': ['o_cmd', 'o_file']
},
'o_zero': {
'level': 'DEBUG',
'handlers': ['o_file']
}
}
}
2.加载配置
import logging.config
logging.config.dictConfig(LOGGING_DIC)
3.使用
log = logging.getLogger('o_owen')
log.warning('123')