Oslo系列之oslo.log

认真能够把事情做对,而用心却能够做到完美。

oslo.log为OpenStack所有组件提供一种标准的日志记录方式,它也能为用户提供定制的日志记录样式。通过oslo.log提供的日志记录,OpenStack开发者可以通过日志文件更加快速准确的定位问题本章将结合OpenStack项目中日志记录的应用分析oslo.log的实现原理。

oslo.log的用法

oslo.log的使用方法

对于OpenStack项目而言,使用oslo.log记录日志的方式非常简单。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from oslo_config import cfg
from oslo_log import log as logging

LOG = logging.getLogger(__name__)
CONF = cfg.CONF
DOMAIN = "demo"

logging.register_options(CONF)
logging.setup(CONF, DOMAIN)

# Oslo Logging uses INFO as default
LOG.info("Oslo Logging")
LOG.warning("Oslo Logging")
LOG.error("Oslo Logging")

首先,导入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

-------------本文结束 感谢您的阅读-------------
作者Magiceses
有问题请 留言 或者私信我的 微博
满分是10分的话,这篇文章你给几分