python logging模块
logging支持的日志五个级别
- debug() 调试级别,一般用于记录程序运行的详细信息
- info() 事件级别,一般用于记录程序的运行过程
- warnning() 警告级别,,一般用于记录程序出现潜在错误的情形
- error() 错误级别,一般用于记录程序出现错误,但不影响整体运行
- critical 严重错误级别 , 出现该错误已经影响到整体运行
logging.basicConfig函数
实例代码:
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s|%(levelname)s|%(filename)s:%(lineno)s|%(message)s", datefmt="%Y-%m-%d %H:%M:%S") name = '张三' age = 18 logging.debug("姓名 %s, 年龄 %d, ", name, age) logging.warning("姓名 %s, 年龄 %d, ", name, age)
输出:
2020-12-16 10:54:02|DEBUG|log.py:66|姓名 张三, 年龄 18,
2020-12-16 10:54:02|WARNING|log.py:67|姓名 张三, 年龄 18,
主要可以对日志的输出格式及方式做相关配置支持的参数由:
- filename: 指定日志文件名
- filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a'
- format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
- %(levelno)s: 打印日志级别的数值
- %(levelname)s: 打印日志级别名称
- %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
- %(filename)s: 打印当前执行程序名
- %(funcName)s: 打印日志的当前函数
- %(lineno)d: 打印日志的当前行号
- %(asctime)s: 打印日志的时间
- %(thread)d: 打印线程ID
- %(threadName)s: 打印线程名称
- %(process)d: 打印进程ID
- %(message)s: 打印日志信息
- datefmt: 指定时间格式,同time.strftime()
- level: 设置日志级别,默认为logging.WARNING,可选 logging.DEBUG logging.INFO logging.WARNING logging.ERROR logging.CRITICAL
- stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略
logging工作流程:
logging的四大组件
- Loggers:记录器, 提供应用程序可直接使用的接口
- Handlers :处理器,将记录器产生的日志发送至目的地
- Filters:过滤器,提供了过滤日志信息的方法
- Formatters:格式化器, 指定日志显示格式
组件分析:
- Loggers:记录器
1.提供调用程序的调用接口
logger = logging.getLogger(__name__)
logger是单例的
2. 决定日志记录的级别
logger.setLevel()
3. 将日志内容传递到相关联的handlers中
logger.addHandler()和logger.removeHandler()
- Handlers处理器
将日志分发到不同的目的地。可以是文件、标准输出、邮件、或者通过socket、http等协议发送到任何地方。
StreamHandler
标准输出stdout(如显示器)分发器
创建方法:sh = logging.StreamHandler(stream=None)
FileHandler
将日志保存到磁盘文件的处理器。
创建方法:fh=logging.FileHandler(filename, mode=‘a’,encoding=None, delay=False)
setFormatter():设置当前handler对象使用的消息格式
- Formatters格式
Formatter对象用来最终设置日志信息的顺序、结构和内容
其构造方法为
Ft = logging.Formatter.__init__(fmt=None, datefmt=None, style=‘%’)
Datefmt默认是%Y-%m-%d %H:%M:%S样式
Style参数默认为百分符%,这表示%(<dictionary key>)s格式的字符串
使用文件配置处理日志
""" 配置文件的方式来处理日志""" # 载入配置文件的信息 logging.config.fileConfig('logging.conf') rootLogger = logging.getLogger() rootLogger.debug("This is root Logger, debug") # 记录器 logger = logging.getLogger('applog') logger.debug("This is applog, debug") a = 'abc' try: int(a) except Exception as e: logger.exception(e)
logging.conf文件配置:
[loggers] keys=root,applog [handlers] keys=fileHandler,consoleHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=consoleHandler [logger_applog] level=DEBUG handlers=fileHandler,consoleHandler qualname=applog propagate=0 [handler_consoleHandler] class=StreamHandler args=(sys.stdout,) level=DEBUG formatter=simpleFormatter [handler_fileHandler] class=handlers.TimedRotatingFileHandler args=('applog.log', 'midnight',1,0) level=DEBUG formatter=simpleFormatter [formatter_simpleFormatter] format=%(asctime)s|%(levelname)8s|%(filename)s[:%(lineno)d]|%(message)s datefmt=%Y-%m-%d %H:%M:%S
参考链接:https://www.jb51.net/article/184398.htm
https://blog.csdn.net/qq_34182808/article/details/100735895
https://cloud.tencent.com/developer/section/1369394 ★
https://www.jb51.net/article/190556.htm ★
https://blog.csdn.net/yy19890521/article/details/80990175 ★