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. [UGUI]渲染层级关系

    参考链接: http://blog.csdn.net/meegomeego/article/details/42060389 Unity中的渲染顺序自上而下大致可以分为三层: 1.Camera层.可以 ...

  2. 流程图工具Visual Paradigm for UML

  3. urllib2.Request 添加浏览器简单反爬 结合BeautifulSoup解析标签

  4. mysql中表里的数据重新设置自增的id的方法

    如果删除表数据用这个 TRUNCATE TABLE tablename 如果不删除表 alter table table_name AUTO_INCREMENT=;

  5. openx

    1openx 插件开发——终端用 2openx _金额 3openx ————带整理 4openx url 5Openx 2.8.x 在php5.4.x下数据统计不能正常显示解决方案 6openx改造 ...

  6. hive设置参数的方法

    1.修改环境变量 ${HIVE_HOME}/conf/hive-site.xml 2.命令行参数 -e : 执行短命令 -f :  执行文件(适合脚本封装) -S : 安静模式,不显示MR的运行过程 ...

  7. HTML5 实现获取 gzip 压缩数据,并进行解压,同时解决汉字乱码,相关 pako.js

    1, 下载 pako.js => http://nodeca.github.io/pako/#Deflate.prototype.onData 2, 首先需要了解一下 XMLHttpReques ...

  8. nopi设置excel只读

  9. mybatis_动态sql 查询、更新

    1)sql where 条件 select id="find" parameterType="User" resultType="User" ...

  10. Java并发:线程间数据传递和交换

    转自:https://www.cnblogs.com/java-zzl/p/9741288.html 一.通过SynchronousQueue方式实现线程间数据传递: 线程A与线程B共同持有一个Syn ...