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
|
## 9.7.0
|
||||||
* Add new network_uuid cli library method for obtaining ID from various neutron resources
|
* Add new network_uuid cli library method for obtaining ID from various neutron resources
|
||||||
* fix fauxhai version for suse
|
* fix fauxhai version for suse
|
||||||
|
* Allow custom logging attributes for loggers, formatters and handlers
|
||||||
|
|
||||||
## 9.6.1
|
## 9.6.1
|
||||||
* Add python_packages attribute for sqlite
|
* Add python_packages attribute for sqlite
|
||||||
|
|
|
@ -234,6 +234,7 @@ License and Author
|
||||||
| **Author** | Ionut Artarisi (<iartarisi@suse.cz>) |
|
| **Author** | Ionut Artarisi (<iartarisi@suse.cz>) |
|
||||||
| **Author** | Chen Zhiwei (<zhiwchen@cn.ibm.com>) |
|
| **Author** | Chen Zhiwei (<zhiwchen@cn.ibm.com>) |
|
||||||
| **Author** | Brett Campbell (<brett.campbell@rackspace.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) 2012-2013, AT&T Services, Inc. |
|
||||||
| **Copyright** | Copyright (c) 2013, Opscode, Inc. |
|
| **Copyright** | Copyright (c) 2013, Opscode, Inc. |
|
||||||
|
|
|
@ -417,8 +417,149 @@ default['openstack']['region'] = 'RegionOne'
|
||||||
default['openstack']['api']['auth']['version'] = 'v2.0'
|
default['openstack']['api']['auth']['version'] = 'v2.0'
|
||||||
|
|
||||||
# logging.conf list keypairs module_name => log level to write
|
# logging.conf list keypairs module_name => log level to write
|
||||||
default['openstack']['logging']['ignore'] = { 'nova.api.openstack.wsgi' => 'WARNING',
|
# DEPRECATED, use new loggers attributes below.
|
||||||
'nova.osapi_compute.wsgi.server' => 'WARNING' }
|
# 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
|
default['openstack']['memcached_servers'] = nil
|
||||||
|
|
||||||
|
|
|
@ -58,14 +58,143 @@ describe 'openstack-common::logging' do
|
||||||
node.set['openstack']['logging']['ignore'] = {
|
node.set['openstack']['logging']['ignore'] = {
|
||||||
'test.nova.api.openstack.wsgi' => 'WARNING'
|
'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\]$/,
|
['[loggers]',
|
||||||
/^level = WARNING$/,
|
'keys=root,ceilometer,cinder,glance,horizon,keystone,nova,'\
|
||||||
/^handlers = prod,debug$/,
|
'neutron,swift,trove,amqplib,sqlalchemy,boto,suds,eventletwsgi,'\
|
||||||
/^qualname = test.nova.api.openstack.wsgi$/
|
'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|
|
].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
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -23,6 +23,12 @@ SUSE_OPTS = {
|
||||||
# We set a default platform for non-platform specific test cases
|
# We set a default platform for non-platform specific test cases
|
||||||
CHEFSPEC_OPTS = UBUNTU_OPTS
|
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
|
shared_context 'library-stubs' do
|
||||||
before do
|
before do
|
||||||
subject.stub(:node).and_return(chef_run.node)
|
subject.stub(:node).and_return(chef_run.node)
|
||||||
|
|
|
@ -1,53 +1,31 @@
|
||||||
[loggers]
|
[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]
|
[formatters]
|
||||||
keys=normal,normal_with_name,debug,syslog_with_name,syslog_debug
|
keys=<%= node["openstack"]["logging"]['formatters'].keys.join(',') %>
|
||||||
|
|
||||||
[handlers]
|
[handlers]
|
||||||
keys=stderr,devel,prod,debug
|
keys=<%= node["openstack"]["logging"]['handlers'].keys.join(',') %>
|
||||||
|
|
||||||
## FORMATTERS ##
|
## FORMATTERS ##
|
||||||
|
|
||||||
[formatter_debug]
|
<% node["openstack"]["logging"]['formatters'].each do |section, options| %>
|
||||||
format=[%(name)s]: %(asctime)s %(levelname)s %(module)s.%(funcName)s %(message)s
|
[formatter_<%= section %>]
|
||||||
|
<% options.each do |key, value| %>
|
||||||
|
<%= key %>=<%= value %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
[formatter_normal]
|
<% end %>
|
||||||
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
|
|
||||||
|
|
||||||
## LOGGERS ##
|
## LOGGERS ##
|
||||||
|
|
||||||
[logger_amqplib]
|
<% node["openstack"]["logging"]['loggers'].each do |section, options| %>
|
||||||
level = WARNING
|
[logger_<%= section %>]
|
||||||
handlers = stderr
|
<% options.each do |key, value| %>
|
||||||
qualname = amqplib
|
<%= key %>=<%= value %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
[logger_sqlalchemy]
|
<% end %>
|
||||||
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
|
|
||||||
|
|
||||||
<% node["openstack"]["logging"]["ignore"].each do |k,v| %>
|
<% node["openstack"]["logging"]["ignore"].each do |k,v| %>
|
||||||
[logger_<%= k.gsub(/\W/, '_') %>]
|
[logger_<%= k.gsub(/\W/, '_') %>]
|
||||||
|
@ -56,81 +34,13 @@ handlers = prod,debug
|
||||||
qualname = <%= k %>
|
qualname = <%= k %>
|
||||||
|
|
||||||
<% end %>
|
<% 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 ##
|
## HANDLERS ##
|
||||||
|
|
||||||
[handler_stderr]
|
<% node["openstack"]["logging"]['handlers'].each do |section, options| %>
|
||||||
class = StreamHandler
|
[handler_<%= section %>]
|
||||||
args = (sys.stderr,)
|
<% options.each do |key, value| %>
|
||||||
formatter = debug
|
<%= key %>=<%= value %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
[handler_devel]
|
<% end %>
|
||||||
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)
|
|
||||||
|
|
Loading…
Reference in New Issue