Allow logging.conf to be configured via attributes
deprecated the ['logging']['ignore'] Allow custom logger, handler and formatter sections Change-Id: Icda718b18aecc0f6caefe6fd56599a720b24f4d0 Implements: blueprint allow-custom-logging-handlers
This commit is contained in:
parent
aa2b638a8f
commit
50d11569ad
|
@ -5,6 +5,7 @@ This file is used to list changes made in each version of cookbook-openstack-com
|
|||
## 9.7.0
|
||||
* Add new network_uuid cli library method for obtaining ID from various neutron resources
|
||||
* fix fauxhai version for suse
|
||||
* Allow custom logging attributes for loggers, formatters and handlers
|
||||
|
||||
## 9.6.1
|
||||
* Add python_packages attribute for sqlite
|
||||
|
|
|
@ -234,6 +234,7 @@ License and Author
|
|||
| **Author** | Ionut Artarisi (<iartarisi@suse.cz>) |
|
||||
| **Author** | Chen Zhiwei (<zhiwchen@cn.ibm.com>) |
|
||||
| **Author** | Brett Campbell (<brett.campbell@rackspace.com>) |
|
||||
| **Author** | Mark Vanderwiel (<vanderwl@us.ibm.com>) |
|
||||
| | |
|
||||
| **Copyright** | Copyright (c) 2012-2013, AT&T Services, Inc. |
|
||||
| **Copyright** | Copyright (c) 2013, Opscode, Inc. |
|
||||
|
|
|
@ -417,8 +417,149 @@ default['openstack']['region'] = 'RegionOne'
|
|||
default['openstack']['api']['auth']['version'] = 'v2.0'
|
||||
|
||||
# logging.conf list keypairs module_name => log level to write
|
||||
default['openstack']['logging']['ignore'] = { 'nova.api.openstack.wsgi' => 'WARNING',
|
||||
'nova.osapi_compute.wsgi.server' => 'WARNING' }
|
||||
# DEPRECATED, use new loggers attributes below.
|
||||
# TODO(MRV) remove in Juno
|
||||
# The old defaults have been incorporated below:
|
||||
# { 'nova.api.openstack.wsgi' => 'WARNING',
|
||||
# 'nova.osapi_compute.wsgi.server' => 'WARNING' }
|
||||
default['openstack']['logging']['ignore'] = {}
|
||||
|
||||
# Allow configured loggers in logging.conf
|
||||
default['openstack']['logging']['loggers'] = {
|
||||
'root' => {
|
||||
'level' => 'NOTSET',
|
||||
'handlers' => 'devel'
|
||||
},
|
||||
'ceilometer' => {
|
||||
'level' => 'DEBUG',
|
||||
'handlers' => 'prod,debug',
|
||||
'qualname' => 'ceilometer'
|
||||
},
|
||||
'cinder' => {
|
||||
'level' => 'DEBUG',
|
||||
'handlers' => 'prod,debug',
|
||||
'qualname' => 'cinder'
|
||||
},
|
||||
'glance' => {
|
||||
'level' => 'DEBUG',
|
||||
'handlers' => 'prod,debug',
|
||||
'qualname' => 'glance'
|
||||
},
|
||||
'horizon' => {
|
||||
'level' => 'DEBUG',
|
||||
'handlers' => 'prod,debug',
|
||||
'qualname' => 'horizon'
|
||||
},
|
||||
'keystone' => {
|
||||
'level' => 'DEBUG',
|
||||
'handlers' => 'prod,debug',
|
||||
'qualname' => 'keystone'
|
||||
},
|
||||
'nova' => {
|
||||
'level' => 'DEBUG',
|
||||
'handlers' => 'prod,debug',
|
||||
'qualname' => 'nova'
|
||||
},
|
||||
'neutron' => {
|
||||
'level' => 'DEBUG',
|
||||
'handlers' => 'prod,debug',
|
||||
'qualname' => 'neutron'
|
||||
},
|
||||
'swift' => {
|
||||
'level' => 'DEBUG',
|
||||
'handlers' => 'prod,debug',
|
||||
'qualname' => 'swift'
|
||||
},
|
||||
'trove' => {
|
||||
'level' => 'DEBUG',
|
||||
'handlers' => 'prod,debug',
|
||||
'qualname' => 'trove'
|
||||
},
|
||||
'amqplib' => {
|
||||
'level' => 'WARNING',
|
||||
'handlers' => 'stderr',
|
||||
'qualname' => 'amqplib'
|
||||
},
|
||||
'sqlalchemy' => {
|
||||
'level' => 'WARNING',
|
||||
# "level' => 'INFO" logs SQL queries.
|
||||
# "level' => 'DEBUG" logs SQL queries and results.
|
||||
# "level' => 'WARNING" logs neither. (Recommended for production systems.)
|
||||
'handlers' => 'stderr',
|
||||
'qualname' => 'sqlalchemy'
|
||||
},
|
||||
'boto' => {
|
||||
'level' => 'WARNING',
|
||||
'handlers' => 'stderr',
|
||||
'qualname' => 'boto'
|
||||
},
|
||||
'suds' => {
|
||||
'level' => 'INFO',
|
||||
'handlers' => 'stderr',
|
||||
'qualname' => 'suds'
|
||||
},
|
||||
'eventletwsgi' => {
|
||||
'level' => 'WARNING',
|
||||
'handlers' => 'stderr',
|
||||
'qualname' => 'eventlet.wsgi.server'
|
||||
},
|
||||
'nova_api_openstack_wsgi' => {
|
||||
'level' => 'WARNING',
|
||||
'handlers' => 'prod,debug',
|
||||
'qualname' => 'nova.api.openstack.wsgi'
|
||||
},
|
||||
'nova_osapi_compute_wsgi_server' => {
|
||||
'level' => 'WARNING',
|
||||
'handlers' => 'prod,debug',
|
||||
'qualname' => 'nova.osapi_compute.wsgi.server'
|
||||
}
|
||||
}
|
||||
|
||||
# Allow configured formatters in logging.conf
|
||||
default['openstack']['logging']['formatters'] = {
|
||||
'normal' => {
|
||||
'format' => '%(asctime)s %(levelname)s %(message)s'
|
||||
},
|
||||
'normal_with_name' => {
|
||||
'format' => '[%(name)s]: %(asctime)s %(levelname)s %(message)s'
|
||||
},
|
||||
'debug' => {
|
||||
'format' => '[%(name)s]: %(asctime)s %(levelname)s %(module)s.%(funcName)s %(message)s'
|
||||
},
|
||||
'syslog_with_name' => {
|
||||
'format' => '%(name)s: %(levelname)s %(message)s'
|
||||
},
|
||||
'syslog_debug' => {
|
||||
'format' => '%(name)s: %(levelname)s %(module)s.%(funcName)s %(message)s'
|
||||
}
|
||||
}
|
||||
|
||||
# Allow configured logging handlers in logging.conf
|
||||
default['openstack']['logging']['handlers'] = {
|
||||
'stderr' => {
|
||||
'args' => '(sys.stderr,)',
|
||||
'class' => 'StreamHandler',
|
||||
'formatter' => 'debug'
|
||||
},
|
||||
'devel' => {
|
||||
'args' => '(sys.stdout,)',
|
||||
'class' => 'StreamHandler',
|
||||
'formatter' => 'debug',
|
||||
'level' => 'NOTSET'
|
||||
},
|
||||
'prod' => {
|
||||
'args' => '((\'/dev/log\'), handlers.SysLogHandler.LOG_LOCAL0)',
|
||||
'class' => 'handlers.SysLogHandler',
|
||||
'formatter' => 'syslog_with_name',
|
||||
'level' => 'INFO'
|
||||
},
|
||||
'debug' => {
|
||||
'args' => '((\'/dev/log\'), handlers.SysLogHandler.LOG_LOCAL1)',
|
||||
'class' => 'handlers.SysLogHandler',
|
||||
'formatter' => 'syslog_debug',
|
||||
'level' => 'DEBUG'
|
||||
}
|
||||
}
|
||||
|
||||
default['openstack']['memcached_servers'] = nil
|
||||
|
||||
|
|
|
@ -58,14 +58,143 @@ describe 'openstack-common::logging' do
|
|||
node.set['openstack']['logging']['ignore'] = {
|
||||
'test.nova.api.openstack.wsgi' => 'WARNING'
|
||||
}
|
||||
content = [
|
||||
'[logger_test_nova_api_openstack_wsgi]',
|
||||
'level = WARNING',
|
||||
'handlers = prod,debug',
|
||||
'qualname = test.nova.api.openstack.wsgi'
|
||||
]
|
||||
expect(chef_run).to render_file(file.name).with_content(build_section(content))
|
||||
end
|
||||
end
|
||||
|
||||
context 'loggers' do
|
||||
it 'adds default loggers' do
|
||||
[
|
||||
/^\[logger_test_nova_api_openstack_wsgi\]$/,
|
||||
/^level = WARNING$/,
|
||||
/^handlers = prod,debug$/,
|
||||
/^qualname = test.nova.api.openstack.wsgi$/
|
||||
['[loggers]',
|
||||
'keys=root,ceilometer,cinder,glance,horizon,keystone,nova,'\
|
||||
'neutron,swift,trove,amqplib,sqlalchemy,boto,suds,eventletwsgi,'\
|
||||
'nova_api_openstack_wsgi,nova_osapi_compute_wsgi_server,'],
|
||||
['[logger_root]',
|
||||
'level=NOTSET',
|
||||
'handlers=devel'],
|
||||
['[logger_ceilometer]',
|
||||
'level=DEBUG',
|
||||
'handlers=prod,debug',
|
||||
'qualname=ceilometer'],
|
||||
['[logger_cinder]',
|
||||
'level=DEBUG',
|
||||
'handlers=prod,debug',
|
||||
'qualname=cinder'],
|
||||
['[logger_glance]',
|
||||
'level=DEBUG',
|
||||
'handlers=prod,debug',
|
||||
'qualname=glance'],
|
||||
['[logger_horizon]',
|
||||
'level=DEBUG',
|
||||
'handlers=prod,debug',
|
||||
'qualname=horizon'],
|
||||
['[logger_keystone]',
|
||||
'level=DEBUG',
|
||||
'handlers=prod,debug',
|
||||
'qualname=keystone'],
|
||||
['[logger_nova]',
|
||||
'level=DEBUG',
|
||||
'handlers=prod,debug',
|
||||
'qualname=nova'],
|
||||
['[logger_neutron]',
|
||||
'level=DEBUG',
|
||||
'handlers=prod,debug',
|
||||
'qualname=neutron'],
|
||||
['[logger_swift]',
|
||||
'level=DEBUG',
|
||||
'handlers=prod,debug',
|
||||
'qualname=swift'],
|
||||
['[logger_trove]',
|
||||
'level=DEBUG',
|
||||
'handlers=prod,debug',
|
||||
'qualname=trove'],
|
||||
['[logger_amqplib]',
|
||||
'level=WARNING',
|
||||
'handlers=stderr',
|
||||
'qualname=amqplib'],
|
||||
['[logger_sqlalchemy]',
|
||||
'level=WARNING',
|
||||
'handlers=stderr',
|
||||
'qualname=sqlalchemy'],
|
||||
['[logger_boto]',
|
||||
'level=WARNING',
|
||||
'handlers=stderr',
|
||||
'qualname=boto'],
|
||||
['[logger_suds]',
|
||||
'level=INFO',
|
||||
'handlers=stderr',
|
||||
'qualname=suds'],
|
||||
['[logger_eventletwsgi]',
|
||||
'level=WARNING',
|
||||
'handlers=stderr',
|
||||
'qualname=eventlet.wsgi.server'],
|
||||
['[logger_nova_api_openstack_wsgi]',
|
||||
'level=WARNING',
|
||||
'handlers=prod,debug',
|
||||
'qualname=nova.api.openstack.wsgi'],
|
||||
['[logger_nova_osapi_compute_wsgi_server]',
|
||||
'level=WARNING',
|
||||
'handlers=prod,debug',
|
||||
'qualname=nova.osapi_compute.wsgi.server']
|
||||
].each do |content|
|
||||
expect(chef_run).to render_file(file.name).with_content(content)
|
||||
expect(chef_run).to render_file(file.name).with_content(build_section(content))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'formatters' do
|
||||
it 'adds default formatters' do
|
||||
[
|
||||
['[formatters]',
|
||||
'keys=normal,normal_with_name,debug,syslog_with_name,syslog_debug'],
|
||||
['[formatter_normal]',
|
||||
'format=%(asctime)s %(levelname)s %(message)s'],
|
||||
['[formatter_normal_with_name]',
|
||||
'format=[%(name)s]: %(asctime)s %(levelname)s %(message)s'],
|
||||
['[formatter_debug]',
|
||||
'format=[%(name)s]: %(asctime)s %(levelname)s %(module)s.%(funcName)s %(message)s'],
|
||||
['[formatter_syslog_with_name]',
|
||||
'format=%(name)s: %(levelname)s %(message)s'],
|
||||
['[formatter_syslog_debug]',
|
||||
'format=%(name)s: %(levelname)s %(module)s.%(funcName)s %(message)s']
|
||||
].each do |content|
|
||||
expect(chef_run).to render_file(file.name).with_content(build_section(content))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'handlers' do
|
||||
it 'adds default handlers' do
|
||||
[
|
||||
['[handlers]',
|
||||
'keys=stderr,devel,prod,debug'],
|
||||
['[handler_stderr]',
|
||||
'args=(sys.stderr,)',
|
||||
'class=StreamHandler',
|
||||
'formatter=debug'],
|
||||
['[handler_devel]',
|
||||
'args=(sys.stdout,)',
|
||||
'class=StreamHandler',
|
||||
'formatter=debug',
|
||||
'level=NOTSET'],
|
||||
['[handler_prod]',
|
||||
"args=(('/dev/log'), handlers.SysLogHandler.LOG_LOCAL0)",
|
||||
'class=handlers.SysLogHandler',
|
||||
'formatter=syslog_with_name',
|
||||
'level=INFO'],
|
||||
['[handler_debug]',
|
||||
"args=(('/dev/log'), handlers.SysLogHandler.LOG_LOCAL1)",
|
||||
'class=handlers.SysLogHandler',
|
||||
'formatter=syslog_debug',
|
||||
'level=DEBUG']
|
||||
].each do |content|
|
||||
expect(chef_run).to render_file(file.name).with_content(build_section(content))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -23,6 +23,12 @@ SUSE_OPTS = {
|
|||
# We set a default platform for non-platform specific test cases
|
||||
CHEFSPEC_OPTS = UBUNTU_OPTS
|
||||
|
||||
# Build a regex for a section of lines
|
||||
def build_section(lines)
|
||||
lines.map! { |line| Regexp.quote(line) }
|
||||
/^#{lines.join('\n')}/
|
||||
end
|
||||
|
||||
shared_context 'library-stubs' do
|
||||
before do
|
||||
subject.stub(:node).and_return(chef_run.node)
|
||||
|
|
|
@ -1,53 +1,31 @@
|
|||
[loggers]
|
||||
keys=root,ceilometer,cinder,glance,horizon,keystone,nova,neutron,swift,amqplib,sqlalchemy,boto,suds,eventletwsgi,<%= node["openstack"]["logging"]["ignore"].map{|k,v| k.gsub(/\W/, '_')}.join(',') %>
|
||||
keys=<%= node["openstack"]["logging"]['loggers'].keys.join(',') %>,<%= node["openstack"]["logging"]["ignore"].map{|k,v| k.gsub(/\W/, '_')}.join(',') %>
|
||||
|
||||
[formatters]
|
||||
keys=normal,normal_with_name,debug,syslog_with_name,syslog_debug
|
||||
keys=<%= node["openstack"]["logging"]['formatters'].keys.join(',') %>
|
||||
|
||||
[handlers]
|
||||
keys=stderr,devel,prod,debug
|
||||
keys=<%= node["openstack"]["logging"]['handlers'].keys.join(',') %>
|
||||
|
||||
## FORMATTERS ##
|
||||
|
||||
[formatter_debug]
|
||||
format=[%(name)s]: %(asctime)s %(levelname)s %(module)s.%(funcName)s %(message)s
|
||||
<% node["openstack"]["logging"]['formatters'].each do |section, options| %>
|
||||
[formatter_<%= section %>]
|
||||
<% options.each do |key, value| %>
|
||||
<%= key %>=<%= value %>
|
||||
<% end %>
|
||||
|
||||
[formatter_normal]
|
||||
format=%(asctime)s %(levelname)s %(message)s
|
||||
|
||||
[formatter_normal_with_name]
|
||||
format=[%(name)s]: %(asctime)s %(levelname)s %(message)s
|
||||
|
||||
[formatter_syslog_with_name]
|
||||
format=%(name)s: %(levelname)s %(message)s
|
||||
|
||||
[formatter_syslog_debug]
|
||||
format=%(name)s: %(levelname)s %(module)s.%(funcName)s %(message)s
|
||||
<% end %>
|
||||
|
||||
## LOGGERS ##
|
||||
|
||||
[logger_amqplib]
|
||||
level = WARNING
|
||||
handlers = stderr
|
||||
qualname = amqplib
|
||||
<% node["openstack"]["logging"]['loggers'].each do |section, options| %>
|
||||
[logger_<%= section %>]
|
||||
<% options.each do |key, value| %>
|
||||
<%= key %>=<%= value %>
|
||||
<% end %>
|
||||
|
||||
[logger_sqlalchemy]
|
||||
level = WARNING
|
||||
handlers = stderr
|
||||
qualname = sqlalchemy
|
||||
# "level = INFO" logs SQL queries.
|
||||
# "level = DEBUG" logs SQL queries and results.
|
||||
# "level = WARNING" logs neither. (Recommended for production systems.)
|
||||
|
||||
[logger_boto]
|
||||
level = WARNING
|
||||
handlers = stderr
|
||||
qualname = boto
|
||||
|
||||
[logger_suds]
|
||||
level = INFO
|
||||
handlers = stderr
|
||||
qualname = suds
|
||||
<% end %>
|
||||
|
||||
<% node["openstack"]["logging"]["ignore"].each do |k,v| %>
|
||||
[logger_<%= k.gsub(/\W/, '_') %>]
|
||||
|
@ -56,81 +34,13 @@ handlers = prod,debug
|
|||
qualname = <%= k %>
|
||||
|
||||
<% end %>
|
||||
[logger_eventletwsgi]
|
||||
level = WARNING
|
||||
handlers = stderr
|
||||
qualname = eventlet.wsgi.server
|
||||
|
||||
[logger_root]
|
||||
level=NOTSET
|
||||
handlers=devel
|
||||
|
||||
[logger_ceilometer]
|
||||
level=DEBUG
|
||||
handlers=prod,debug
|
||||
qualname=ceilometer
|
||||
|
||||
[logger_cinder]
|
||||
level=DEBUG
|
||||
handlers=prod,debug
|
||||
qualname=cinder
|
||||
|
||||
[logger_glance]
|
||||
level=DEBUG
|
||||
handlers=prod,debug
|
||||
qualname=glance
|
||||
|
||||
[logger_horizon]
|
||||
level=DEBUG
|
||||
handlers=prod,debug
|
||||
qualname=horizon
|
||||
|
||||
[logger_keystone]
|
||||
level=DEBUG
|
||||
handlers=prod,debug
|
||||
qualname=keystone
|
||||
|
||||
[logger_nova]
|
||||
level=DEBUG
|
||||
handlers=prod,debug
|
||||
qualname=nova
|
||||
|
||||
[logger_neutron]
|
||||
level=DEBUG
|
||||
handlers=prod,debug
|
||||
qualname=neutron
|
||||
|
||||
[logger_swift]
|
||||
level=DEBUG
|
||||
handlers=prod,debug
|
||||
qualname=swift
|
||||
|
||||
## HANDLERS ##
|
||||
|
||||
[handler_stderr]
|
||||
class = StreamHandler
|
||||
args = (sys.stderr,)
|
||||
formatter = debug
|
||||
<% node["openstack"]["logging"]['handlers'].each do |section, options| %>
|
||||
[handler_<%= section %>]
|
||||
<% options.each do |key, value| %>
|
||||
<%= key %>=<%= value %>
|
||||
<% end %>
|
||||
|
||||
[handler_devel]
|
||||
class=StreamHandler
|
||||
level=NOTSET
|
||||
formatter=debug
|
||||
args=(sys.stdout,)
|
||||
|
||||
[handler_file]
|
||||
class=FileHandler
|
||||
formatter=debug
|
||||
args=('/var/log/openstack/openstack.log', 'w')
|
||||
|
||||
[handler_prod]
|
||||
level=INFO
|
||||
class=handlers.SysLogHandler
|
||||
formatter=syslog_with_name
|
||||
args=(('/dev/log'), handlers.SysLogHandler.LOG_LOCAL0)
|
||||
|
||||
[handler_debug]
|
||||
level=DEBUG
|
||||
class=handlers.SysLogHandler
|
||||
formatter=syslog_debug
|
||||
args=(('/dev/log'), handlers.SysLogHandler.LOG_LOCAL1)
|
||||
<% end %>
|
||||
|
|
Loading…
Reference in New Issue