认真能够把事情做对,而用心却能够做到完美。
oslo.log为OpenStack所有组件提供一种标准的日志记录方式,它也能为用户提供定制的日志记录样式。通过oslo.log提供的日志记录,OpenStack开发者可以通过日志文件更加快速准确的定位问题本章将结合OpenStack项目中日志记录的应用分析oslo.log的实现原理。
oslo.log的用法
oslo.log的使用方法
对于OpenStack项目而言,使用oslo.log记录日志的方式非常简单。
1 | from oslo_config import cfg |
首先,导入oslo_log的log模块,然后使用log模块中的getLogger()方法创建一个日志对象用于记录日志;接着,为日志注册配置参数,设置域。最后,使用对象中的方法记录相关的日志。
oslo.log相关的配置参数
在使用oslo.log时需要注册配置参数,这些配置参数常被统一写在对应组件的配置文件中。一般地,常用的配置参数如下:
- debug:表示是否将日志级别设置为DEBUG,默认为false。
- verbose:表示将日志级别设置为INFO还是WARNNING,true为INFO,false表示设置为WARNNING。
- log_file:表示日志文件的名称,默认以组件中服务名称命名。
- log_dir:表示日志文件的路径,OpenStack日志文件默认存储在/var/log/目录下。
- log_date_format:表示日志时间的格式,如%Y-%m-%d %H:%m:%s表示的格式为“2017-11-3 14:16:00”。
- logging_context_format_string:表示日志内容的格式。
- use_stderr:表示是否使用系统标准输出打印错误日志。
- default_log_levels:表示日志的默认级别。
- instance_format:表示instance的日志打印格式。
以上的配置参数是在OpenStack开发与使用中经常需要关注的日志相关配置参数,如果还需要使用其他配置参数可参考官方文档,在此不再赘述。
oslo.log日志级别
在一般的日志系统中,为了区分输出日志的类型,方便用户根据日志定位和分析问题,系统都会使用多种日志级别表示日志的类型;oslo.log也不例外。在oslo.log中,日志通常分为以下7个级别:
- CRITICAL/FATAL:最高日志级别,用于记录项目中非常严重的问题。
- ERROR:常用于try-catch语句中,记录程序异常日志。
- WARNNING/WARN:用于记录告警日志,在OpenStack中默认打印WARN及以上级别的日志。
- INFO:用于记录用户或程序员关心的一般信息,常用于打印一些工作流程或操作步骤等信息。
- DEBUG:常用于开发环境,用于开发时打印测试日志。
- NOTEST:可用于用户自定义级别,一般设置为该级别,则表示打印所有日志。
- TRACE:可用于追踪日志。
日志格式
OpenStack各个组件一般都使用统一的日志格式记录日志,以便开发者可以快速定位问题。其格式如下:
1 | <时间戳><日志级别><模块><Request ID><日志内容><源代码位置> |
由上述格式可知,OpenStack开发中通过日志文件定位问题是非常简单容易的,只要找到日志级别为ERROR的记录,然后找到打印的堆栈及其源代码位置即可。
oslo.log的实现
对于oslo.log的实现,其中最重要的便是Logger类,OpenStack各组件记录日志时,都需要创建一个Logger对象来记录日志。该类常用的属性包括name,标识该对象的名称,通常OpenStack组件使用模块作为日志记录的名称;level标识日志级别。该类定义了debug()、info()、warning()、warn()、exception()、error()、fatal()、critical()等方法来记录特定级别的日志。在记录日志时,每个方法会调用isEnabledFor(level)方法判断当前级别是否高于指定级别,系统只记录高于指定级别的日志。
在OpenStack其他组件使用日志记录时,只需要导入oslo_log.log模块,然后调用log.getLogger()方法即可获取到Logger类对象,然后通过调用上文中列出的方法记录日志即可。
原文链接:https://blog.csdn.net/Bill_Xiang_/article/details/78434662