{%- set log_handlers = [] -%}
{%- for log_handler_name, log_handler_attrs in values.logging.log_handlers.items() %}
  {%- if log_handler_attrs.get('enabled', False) %}
    {%- do log_handlers.append(log_handler_name) -%}
  {%- endif %}
{%- endfor %}
[loggers]
keys = root, ceilometer

[handlers]
keys = {{ log_handlers | join(", ") }}

[formatters]
keys = context, default, fluentd

[logger_root]
level = WARNING
handlers = {{ log_handlers | join(", ") }}

[logger_ceilometer]
level = INFO
handlers = {{ log_handlers | join(", ") }}
qualname = ceilometer
propagate = 0

{%- if values.logging.log_handlers.get('fluentd', {}).get('enabled', False) %}
[handler_fluentd]
class = fluent.handler.FluentHandler
args = ('openstack.{{ service_name | replace("-", ".", 1) }}', 'localhost', 24224)
formatter = fluentd
{%- endif %}

{%- if values.logging.log_handlers.watchedfile.enabled %}
[handler_watchedfile]
class = handlers.WatchedFileHandler
args = ('/var/log/ceilometer/{{ service_name }}.log',)
formatter = context
{%- endif %}

[formatter_context]
class = oslo_log.formatters.ContextFormatter

[formatter_default]
format = %(message)s

{%- if values.logging.log_handlers.get('fluentd', {}).get('enabled', False) %}
[formatter_fluentd]
class = oslo_log.formatters.FluentFormatter
{%- endif %}
