[loggers]
keys = root, cinder, taskflow, cinder_flow_utils

[handlers]
keys = stderr, stdout, watchedfile, syslog, tasks, null

[formatters]
keys = context, default

[logger_root]
level = WARNING
handlers = null

[logger_cinder]
level = INFO
handlers = stderr
qualname = cinder

# Both of these are used for tracking what cinder and taskflow is doing with
# regard to flows and tasks (and the activity there-in).
[logger_cinder_flow_utils]
level = INFO
handlers = tasks,stderr
qualname = cinder.flow_utils

[logger_taskflow]
level = INFO
handlers = tasks
qualname = taskflow

[logger_amqplib]
level = WARNING
handlers = stderr
qualname = amqplib

[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

[logger_eventletwsgi]
level = WARNING
handlers = stderr
qualname = eventlet.wsgi.server

[handler_stderr]
class = StreamHandler
args = (sys.stderr,)
formatter = context

[handler_stdout]
class = StreamHandler
args = (sys.stdout,)
formatter = context

[handler_watchedfile]
class = handlers.WatchedFileHandler
args = ('cinder.log',)
formatter = context

[handler_tasks]
class = handlers.WatchedFileHandler
args = ('tasks.log',)
formatter = context

[handler_syslog]
class = handlers.SysLogHandler
args = ('/dev/log', handlers.SysLogHandler.LOG_USER)
formatter = context

[handler_null]
class = logging.NullHandler
formatter = default
args = ()

[formatter_context]
class = cinder.openstack.common.log.ContextFormatter

[formatter_default]
format = %(message)s
