logging 的中级用法
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
logging module learning
advanced
"""
import logging
# 编程的方法写一下高级的用法
# 记录器
logger = logging.getLogger('applog') # 先调用getLogger这个对对象, 相当于拿到了一只笔
logger.setLevel(logging.DEBUG)
# 处理器
consoleHandler = logging.StreamHandler() # StreamHandler 打印在屏幕
consoleHandler.setLevel(logging.DEBUG)
"""如果logger优先级(默认问warning)大于 handler的setlevle级别,则按logger的为准,
想打印更低级别的需要调整logger的日志级别到更低
"""
fileHandler = logging.FileHandler(filename='addDemo.log',mode='w') # 可以给handler指定写入文件的名字和模式等
fileHandler.setLevel(logging.INFO) # 没有给handler指定记录的日志级别的时候,默认为logger的级别
# formatter 定于日志格式 ,可以在s前面加数字控制字段的长度,+ ,- 左右对其
formatter = logging.Formatter('%(asctime)s:|%(levelname)-8s:|%(filename)s|%(message)s',datefmt='%Y-%m-%d %H:%M:%S')
# 给处理器设置格式
consoleHandler.setFormatter(formatter)
fileHandler.setFormatter(formatter)
# 记录器设置处理器
logger.addHandler(consoleHandler)
logger.addHandler(fileHandler)
# 定义一个过滤器
flt = logging.Filter("cn.ccna")
# 关联过滤器
# logger.addFilter(flt) # 关联到logger之后,回去匹配logger的名字 'applog' ,不匹配则没有日志打印出来
# 关联handler
fileHandler.addFilter(flt) # 执行后addDemo.log 中无输出,因为consolehandler没有关联过滤器因此有输出
# 打印日志的代码,通过logger调用
logger.debug("this is debug log")
logger.info("this is info log")
logger.warning("this is warning log")
logger.error("this is error log")
logger.critical("this is critical log")
注意点: 记录器logger相当与拿起一直笔,处理器 handler 告诉我们记录在哪里 , Formatter(创建formatter)允许我们定义日志的格式。接下来需要setFormatter 给处理器handler设置格式,再将记录器关联到处理器。 最后通过logger 调用。
logging 的高级用法
1.准备logging模版config
[loggers]
keys=root,applog
[handlers]
keys=fileHandler,consoleHandler
[formatters]
keys=simpleFormatter
[logger_root] # 定义logger root
level=DEBUG
handlers=consoleHandler
[logger_applog] # 定义logger applog
level=DEBUG
handlers=fileHandler,consoleHandler
qualname=applog # 相当于编程方式中的logger = logging.getLogger('applog'),定义logger(笔)的名字
propagate=0 # 日志继承关系,通常为0
[handler_consoleHandler] # 定义consoleHandler 属性
class=StreamHandler
args=(sys.stdout,) # sys.stdout 为标准输出,即从console打印
level=DEBUG
formatter=simpleFormatter
[handler_fileHandler]
class=handlers.TimedRotatingFileHandler # 采用一种按时间滚动写入日志的方式
args=('applog_confTemplate.log','midnight',1,0) # 写入文件为applog_confTemplate.log, 在midnight循环写入到下一个文件,1为延迟1s,如果需要1点就设置成3600 , 0代表永不删除
level=DEBUG
formatter=simpleFormatter
[formatter_simpleFormatter]
format = %(asctime)s:|%(levelname)-8s:|%(filename)s|%(message)s
datefmt=%Y-%m-%d %H:%M:%S
- 使用时需要去除注释部分
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
logging module learning
config template
"""
import logging
import logging.config
# 配置文件的方式处理日志
logging.config.fileConfig('logging.conf') # load logging.conf配置文件
userlogger = logging.getLogger(__name__)
userlogger.debug('This is root logger,debug')
applogger = logging.getLogger('applog')
applogger.debug('this is applog , debug')
a = 'abc'
try:
int(a)
except Exception as e:
# applogger.error(e)
applogger.exception(e) #打印错误的细节到log
在py脚本中加载conf,然后调用logger