oslo_log是openstack中的日志模块,其对python logging的封装,可以快速便捷地写出我们的日志模块。官网上有许多参考示例,但实例永远是实例,其配合oslo_config模块,快捷注册日志,从而获取进程启动运行中的所有日志。官网资料详尽,参考https://docs.openstack.org/oslo.log/。

1.此处说明一点,关于LOG日志如何写入文件。

进程启动时,以ceilometer-agent-compute为例,除了有启动的脚本外,还有配置文件 --config-file 和 日志文件 --log-file:

在程序中,只需要将这些配置注册到oslo_config中,参考ceilometer的源码,编写一个例子,将进程的调用日志记录在文件中。

 from oslo_log import log
from oslo_config import cfg
import sys
LOG = log.getLogger(__name__) def prepare_service(argv=None, config_file=None):
log.register_options(cfg.CONF) # 注册配置项
log_level = cfg.CONF.default_log_levels # 设置默认日志级别INFO
log.set_defaults(default_log_levels=log_level)
if argv is None:
argv = sys.argv
cfg.CONF(argv[1:], project='ceilometer', default_config_files=config_file) # 将进程中配置文件或日志文件注册在配置项中
log.setup(cfg.CONF, 'ceilometer') # def print_log():
LOG.info("===>I LOVE YOU CAESAR<=====") prepare_service()
print_log()

进程启动时,带上日志路径参数,执行完成后,可在日志文件中看到执行结果。

2.oslo_config对配置项的默认管理,以上通过 --config-file 传入服务配置,--log-file 传入服务日志位置。对于config-file中未配置项,使用默认的配置,其定义、注册和调用,举例说明:

定义两个配置项 mongo_OPTS和OPTS

mongo_OPTS = [
cfg.StrOpt('database',
default='mongodb',
help='database'), ]
OPTS = [
cfg.IntOpt('max_retries',
default=3,
help="max connection to database times"
),
cfg.IntOpt('retry_interval',
default=60,
help='connection timeout 300 senconds'),
cfg.StrOpt('connection',
default='mongodb+mongodb://196.168.1.111:27017,'
'196.168.1.112:27017,'
'196.168.1.113:27017/test',
help='connection mongodb url')
]

将两个配置项分别注册在DEFAULT和mongodb 分组中方法见下:

def list_opts():
return [('MONGO',itertools.chain(OPTS)),
('DEFAULT', itertools.chain(mongo_OPTS)),
] conf = cfg.ConfigOpts() for group, options in list_opts():
conf.register_opts(list(options),
group=None if group == "DEFAULT" else group)

注册完成后,即可通过conf.database获取DEFAULT中定义的mongodb,通过conf.MONGO.connection 获取其中connection对应值。

基于oslo_log的日志管理的更多相关文章

  1. spring+mybatis基于 AOP实现业务日志管理

    最近在项目上用到了操作日志的相关,之前的解决方案就是自己写一个日志project,然后统一调用日志接口即可,这样方便自定义定制,因为有很多设备控制之类的都是需要确认一下的,但是,对数据的操作,比如,增 ...

  2. 基于吉日嘎底层架构的Web端权限管理操作演示-日志管理

    权限管理要实现的效果是对“ 谁”可以访问“什么内容”,可以进行“哪些操作” 一系列权限的精细化控制.衡量一个软件好坏的重要标准是:它的权限体系是否足够细致.是否可以立体勾勒出信息对象的访问控制.前面4 ...

  3. 基于Common.Logging + Log4Net实现的日志管理

    前言 Common.Logging 是Commons-Logging(apache最早提供的日志门面接口,提供了简单的日志实现以及日志解耦功能) 项目的.net版本.其目的是为 "所有的.n ...

  4. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

  5. 第13章 Linux日志管理

    1. 日志管理 (1)简介 在CentOS 6.x中日志服务己经由rsyslogd取代了原先的syslogd服务.rsyslogd日志服务更加先进,功能更多.但是不论该服务的使用,还是日志文件的格式其 ...

  6. ABP(现代ASP.NET样板开发框架)系列之8、ABP日志管理

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之8.ABP日志管理 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...

  7. ElasticSearch+NLog+Elmah实现Asp.Net分布式日志管理

    本文将介绍使用NLOG.Elmah结合ElasticSearch实现分布式日志管理. 一.ElasticSearch简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布 ...

  8. linux 学习 14 日志管理

    第十四讲 日志管理 14.1 日志管理-简介 .日志服务 在CentOS .x中日志服务已经由rsyslogd取代了原先的syslogd服务.rsyslogd日志服务更加先进,功能更多.但是不论该服 ...

  9. SQL Server中的事务日志管理(7/9):处理日志过度增长

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

随机推荐

  1. c#调用带输出参数的存储过程

    sql server中编写一个存储过程: CREATE PROCEDURE ProGetPWD @username varchar(20), @password varchar(20) OUTPUT ...

  2. UEditor 在ie中报console未定义解决方案

    解决办法:                  1.注释掉该代码               2.或者加入如下代码即可,本人已经测试过,没有问题. window.console = window.con ...

  3. idea 添加 VUE 的语法支持和开发

    <一>VUE的开发分两种,一种是直接在HTML文件中使用,一种是VUE文件的形式开发 1,首先我们先让 HTML 文件支持 VUE 的语法指令提示 2,File -> Setting ...

  4. smarty获取php中的变量

    {$smarty}保留变量不需要从PHP脚本中分配,是可以在模板中直接访问的数组类型变量,通常被用于访问一些特殊的模板变量.例如,直接在模板中访问页面请求变量.获取访问模板时的时间邮戳.直接访问PHP ...

  5. Python集合的基本操作

    #-*coding:utf-8 -* list =set([2,3,4]) list2 =set([5,3,7]) #交集 #print (list.intersection(list2)) #并集 ...

  6. js中实现cookie的增删改查(document.cookie的使用详情)

    一.设置cookie的值 1.每个cookie都是一个名称/值对,名称/值对用等号连接,并将该名称/值对赋值给document.cookie即可.如:document.cookie="id= ...

  7. Linux主题:获取帮助

    Linux有多种方式获取帮助,这些帮助通过不同的命令,获得不同详细程度和文字量的帮助. help help方式有两种用法,一种是help command,另一种是command --help.前一种是 ...

  8. Python中fileinput模块使用方法

    fileinput模块提供处理一个或多个文本文件的功能,可以通过使用for循环来读取一个或多个文本文件的所有行.python2.7文档关于fileinput介绍:fileinput   fileinp ...

  9. .NET 基础知识

    .net程序基本编写.执行流程(c#)       1>编写c#代码,保存为.cs文件.       2>通过csc.exe程序来将.cs文件编译为.net程序集(.exe或.dll).此 ...

  10. 记录在Centos下安装和使用Git的过程,从github上克隆仓库和提交。

    1 安装git yum install git 2配置DNS vi /etc/resolv.conf nameserver 8.8.8.8nameserver 8.8.4.4 3 设置网关 vi /e ...