diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml
index 2fc9e0782..806aff1fc 100644
--- a/ansible/group_vars/all.yml
+++ b/ansible/group_vars/all.yml
@@ -20,6 +20,8 @@ node_config_directory: "/etc/kolla/{{ project }}"
# Kolla options
###################
+std_logger: true
+
# Which orchestration engine to use. Valid options are [ ANSIBLE, KUBERNETES ]
orchestration_engine: "KUBERNETES"
diff --git a/ansible/roles/ceph/templates/ceph.conf.j2 b/ansible/roles/ceph/templates/ceph.conf.j2
index e8c7a5173..c716ea723 100644
--- a/ansible/roles/ceph/templates/ceph.conf.j2
+++ b/ansible/roles/ceph/templates/ceph.conf.j2
@@ -1,9 +1,16 @@
[global]
+{% if std_logger %}
+log to syslog = false
+err to syslog = false
+log to stderr = true
+err to stderr = true
+{% else %}
log file = /var/log/kolla/ceph/$cluster-$name.log
log to syslog = false
err to syslog = false
log to stderr = false
err to stderr = false
+{% endif %}
fsid = {{ ceph_cluster_fsid }}
diff --git a/ansible/roles/cinder/templates/cinder.conf.j2 b/ansible/roles/cinder/templates/cinder.conf.j2
index 8d5e9032d..5af22cc02 100644
--- a/ansible/roles/cinder/templates/cinder.conf.j2
+++ b/ansible/roles/cinder/templates/cinder.conf.j2
@@ -1,12 +1,18 @@
[DEFAULT]
debug = {{ cinder_logging_debug }}
-log_dir = /var/log/kolla/cinder
use_forwarded_for = true
+{% if std_logger %}
+use_syslog = False
+use_stderr = True
+{% else %}
+log_dir = /var/log/kolla/cinder
+
# Set use_stderr to False or the logs will also be sent to stderr
# and collected by Docker
use_stderr = False
+{% endif %}
enable_v1_api=false
osapi_volume_workers = {{ openstack_service_workers }}
diff --git a/ansible/roles/glance/templates/glance-api.conf.j2 b/ansible/roles/glance/templates/glance-api.conf.j2
index a08c643ae..39248c663 100644
--- a/ansible/roles/glance/templates/glance-api.conf.j2
+++ b/ansible/roles/glance/templates/glance-api.conf.j2
@@ -1,9 +1,15 @@
[DEFAULT]
debug = {{ glance_logging_debug }}
+use_forwarded_for = true
+
+{% if std_logger %}
+use_syslog = False
+use_stderr = True
+{% else %}
# NOTE(elemoine) log_dir alone does not work for Glance
log_file = /var/log/kolla/glance/api.log
-use_forwarded_for = true
+{% endif %}
bind_host = {{ api_interface_address }}
bind_port = {{ glance_api_port }}
diff --git a/ansible/roles/glance/templates/glance-registry.conf.j2 b/ansible/roles/glance/templates/glance-registry.conf.j2
index 6f7d4790a..d40dc9223 100644
--- a/ansible/roles/glance/templates/glance-registry.conf.j2
+++ b/ansible/roles/glance/templates/glance-registry.conf.j2
@@ -1,8 +1,13 @@
[DEFAULT]
debug = {{ glance_logging_debug }}
+{% if std_logger %}
+use_syslog = False
+use_stderr = True
+{% else %}
# NOTE(elemoine) log_dir alone does not work for Glance
log_file = /var/log/kolla/glance/registry.log
+{% endif %}
bind_host = {{ api_interface_address }}
bind_port = {{ glance_registry_port }}
diff --git a/ansible/roles/heat/templates/heat.conf.j2 b/ansible/roles/heat/templates/heat.conf.j2
index bccfea0fd..b0d046437 100644
--- a/ansible/roles/heat/templates/heat.conf.j2
+++ b/ansible/roles/heat/templates/heat.conf.j2
@@ -1,7 +1,12 @@
[DEFAULT]
debug = {{ heat_logging_debug }}
+{% if std_logger %}
+use_syslog = False
+use_stderr = True
+{% else %}
log_dir = /var/log/kolla/heat
+{% endif %}
heat_watch_server_url = {{ public_protocol }}://{{ kolla_external_fqdn }}:{{ heat_api_cfn_port }}
heat_metadata_server_url = {{ public_protocol }}://{{ kolla_external_fqdn }}:{{ heat_api_cfn_port }}
diff --git a/ansible/roles/horizon/templates/horizon.conf.j2 b/ansible/roles/horizon/templates/horizon.conf.j2
index d6d684873..db44fa82b 100644
--- a/ansible/roles/horizon/templates/horizon.conf.j2
+++ b/ansible/roles/horizon/templates/horizon.conf.j2
@@ -3,8 +3,13 @@ Listen {{ api_interface_address }}:{{ horizon_port }}
LogLevel warn
+{% if std_logger %}
+ ErrorLog /proc/self/fd/2
+ CustomLog /proc/self/fd/1 combined
+{% else %}
ErrorLog /var/log/kolla/horizon/horizon.log
CustomLog /var/log/kolla/horizon/horizon-access.log combined
+{% endif %}
WSGIScriptReloading On
WSGIDaemonProcess horizon-http processes={{ openstack_service_workers }} threads=1 user=horizon group=horizon display-name=%{GROUP} python-path={{ python_path }}
diff --git a/ansible/roles/ironic/templates/ironic-inspector.conf.j2 b/ansible/roles/ironic/templates/ironic-inspector.conf.j2
index fa27c7393..00e1c57d3 100644
--- a/ansible/roles/ironic/templates/ironic-inspector.conf.j2
+++ b/ansible/roles/ironic/templates/ironic-inspector.conf.j2
@@ -1,6 +1,12 @@
[DEFAULT]
debug = {{ ironic_logging_debug }}
+
+{% if std_logger %}
+use_syslog = False
+use_stderr = True
+{% else %}
log_dir = /var/log/kolla/ironic
+{% endif %}
listen_address = 0.0.0.0
listen_port = {{ ironic_inspector_port }}
diff --git a/ansible/roles/ironic/templates/ironic.conf.j2 b/ansible/roles/ironic/templates/ironic.conf.j2
index 6d11f9c52..01f066069 100644
--- a/ansible/roles/ironic/templates/ironic.conf.j2
+++ b/ansible/roles/ironic/templates/ironic.conf.j2
@@ -1,7 +1,12 @@
[DEFAULT]
debug = {{ ironic_logging_debug }}
+{% if std_logger %}
+use_syslog = False
+use_stderr = True
+{% else %}
log_dir = /var/log/kolla/ironic
+{% endif %}
admin_user = {{ openstack_auth.username }}
admin_password = {{ keystone_admin_password }}
diff --git a/ansible/roles/keystone/templates/keystone.conf.j2 b/ansible/roles/keystone/templates/keystone.conf.j2
index a6b8f1b0a..3eb04be65 100644
--- a/ansible/roles/keystone/templates/keystone.conf.j2
+++ b/ansible/roles/keystone/templates/keystone.conf.j2
@@ -5,9 +5,14 @@ notification_format = cadf
transport_url = rabbit://{{ rabbitmq_user }}:{{ rabbitmq_password }}@rabbitmq:{{ rabbitmq_port }}
{% endif %}
+{% if std_logger %}
+use_syslog = False
+use_stderr = True
+{% else %}
# NOTE(elemoine) log_dir alone does not work for Keystone
log_file = /var/log/kolla/keystone/keystone.log
use_stderr = True
+{% endif %}
secure_proxy_ssl_header = HTTP_X_FORWARDED_PROTO
diff --git a/ansible/roles/keystone/templates/wsgi-keystone.conf.j2 b/ansible/roles/keystone/templates/wsgi-keystone.conf.j2
index a3f98173a..ae1616251 100644
--- a/ansible/roles/keystone/templates/wsgi-keystone.conf.j2
+++ b/ansible/roles/keystone/templates/wsgi-keystone.conf.j2
@@ -12,9 +12,14 @@ Listen {{ api_interface_address }}:{{ keystone_admin_port }}
= 2.4>
ErrorLogFormat "%{cu}t %M"
- ErrorLog "{{ keystone_log_dir }}/keystone-apache-public-error.log"
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b %D \"%{Referer}i\" \"%{User-Agent}i\"" logformat
+{% if std_logger %}
+ ErrorLog /proc/self/fd/2
+ CustomLog /proc/self/fd/1 combined
+{% else %}
+ ErrorLog "{{ keystone_log_dir }}/keystone-apache-public-error.log"
CustomLog "{{ keystone_log_dir }}/keystone-apache-public-access.log" logformat
+{% endif %}
@@ -26,7 +31,12 @@ Listen {{ api_interface_address }}:{{ keystone_admin_port }}
= 2.4>
ErrorLogFormat "%{cu}t %M"
- ErrorLog "{{ keystone_log_dir }}/keystone-apache-admin-error.log"
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b %D \"%{Referer}i\" \"%{User-Agent}i\"" logformat
+{% if std_logger %}
+ ErrorLog /proc/self/fd/2
+ CustomLog /proc/self/fd/1 combined
+{% else %}
+ ErrorLog "{{ keystone_log_dir }}/keystone-apache-admin-error.log"
CustomLog "{{ keystone_log_dir }}/keystone-apache-admin-access.log" logformat
+{% endif %}
diff --git a/ansible/roles/mariadb/templates/galera.cnf.j2 b/ansible/roles/mariadb/templates/galera.cnf.j2
index f3bf18ac5..b5a65341e 100644
--- a/ansible/roles/mariadb/templates/galera.cnf.j2
+++ b/ansible/roles/mariadb/templates/galera.cnf.j2
@@ -8,7 +8,9 @@ default-character-set=utf8
bind-address={{ api_interface_address }}
port={{ mariadb_port }}
+{% if not std_logger %}
log-error=/var/log/kolla/mariadb/mariadb.log
+{% endif %}
log-bin=mysql-bin
binlog_format=ROW
diff --git a/ansible/roles/neutron/templates/dnsmasq.conf.j2 b/ansible/roles/neutron/templates/dnsmasq.conf.j2
index 91566c418..843bfa058 100644
--- a/ansible/roles/neutron/templates/dnsmasq.conf.j2
+++ b/ansible/roles/neutron/templates/dnsmasq.conf.j2
@@ -1 +1,8 @@
+{% if std_logger %}
+#FIXME(kfox1111) This breaks things for some reason... I suspect a parent process is
+#reading stdout. Come up with an alternate solution in a follow on PS for this issue.
+#log-facility=-
log-facility=/var/log/kolla/neutron/dnsmasq.log
+{% else %}
+log-facility=/var/log/kolla/neutron/dnsmasq.log
+{% endif %}
diff --git a/ansible/roles/neutron/templates/neutron.conf.j2 b/ansible/roles/neutron/templates/neutron.conf.j2
index 06849881d..8a32b17d1 100644
--- a/ansible/roles/neutron/templates/neutron.conf.j2
+++ b/ansible/roles/neutron/templates/neutron.conf.j2
@@ -2,12 +2,17 @@
[DEFAULT]
debug = {{ neutron_logging_debug }}
-log_dir = /var/log/kolla/neutron
-
+{% if std_logger %}
+use_syslog = False
+use_stderr = True
+{% else %}
# NOTE(elemoine): set use_stderr to False or the logs will also be sent to
# stderr and collected by Docker
use_stderr = False
+log_dir = /var/log/kolla/neutron
+{% endif %}
+
bind_host = {{ api_interface_address }}
bind_port = {{ neutron_server_port }}
diff --git a/ansible/roles/neutron/templates/openvswitch-db-server.json.j2 b/ansible/roles/neutron/templates/openvswitch-db-server.json.j2
index 72b9ad694..147871ae1 100644
--- a/ansible/roles/neutron/templates/openvswitch-db-server.json.j2
+++ b/ansible/roles/neutron/templates/openvswitch-db-server.json.j2
@@ -1,4 +1,4 @@
{
- "command": "start-ovsdb-server {{ api_interface_address }} {% if orchestration_engine == 'KUBERNETES' %} {{ neutron_bridge_name }} {{ neutron_external_interface }} {% endif %}",
+ "command": "start-ovsdb-server {{ api_interface_address }} {{ neutron_bridge_name }} {{ neutron_external_interface }}",
"config_files": []
}
diff --git a/ansible/roles/neutron/templates/openvswitch-vswitchd.json.j2 b/ansible/roles/neutron/templates/openvswitch-vswitchd.json.j2
index 97308d886..eb916fa5f 100644
--- a/ansible/roles/neutron/templates/openvswitch-vswitchd.json.j2
+++ b/ansible/roles/neutron/templates/openvswitch-vswitchd.json.j2
@@ -1,4 +1,8 @@
{
+{% if std_logger %}
+ "command": "/usr/sbin/ovs-vswitchd unix:/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall",
+{% else %}
"command": "/usr/sbin/ovs-vswitchd unix:/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --log-file=/var/log/kolla/openvswitch/ovs-vswitchd.log",
+{% endif %}
"config_files": []
}
diff --git a/ansible/roles/nova/templates/libvirtd.conf.j2 b/ansible/roles/nova/templates/libvirtd.conf.j2
index a89b97faf..356ae3614 100644
--- a/ansible/roles/nova/templates/libvirtd.conf.j2
+++ b/ansible/roles/nova/templates/libvirtd.conf.j2
@@ -3,5 +3,11 @@ listen_tls = 0
auth_tcp = "none"
ca_file = ""
log_level = 3
+
+{% if std_logger %}
+log_outputs = "3:stderr"
+{% else %}
log_outputs = "3:file:/var/log/kolla/libvirt/libvirtd.log"
+{% endif %}
+
listen_addr = "{{ api_interface_address }}"
diff --git a/ansible/roles/nova/templates/nova.conf.j2 b/ansible/roles/nova/templates/nova.conf.j2
index a7be33a72..578006bcf 100644
--- a/ansible/roles/nova/templates/nova.conf.j2
+++ b/ansible/roles/nova/templates/nova.conf.j2
@@ -2,7 +2,12 @@
[DEFAULT]
debug = {{ nova_logging_debug }}
+{% if std_logger %}
+use_syslog = False
+use_stderr = True
+{% else %}
log_dir = /var/log/kolla/nova
+{% endif %}
state_path = /var/lib/nova
diff --git a/ansible/roles/nova/templates/placement-api-wsgi.conf.j2 b/ansible/roles/nova/templates/placement-api-wsgi.conf.j2
index 0eadd2d1f..d5954478d 100644
--- a/ansible/roles/nova/templates/placement-api-wsgi.conf.j2
+++ b/ansible/roles/nova/templates/placement-api-wsgi.conf.j2
@@ -12,9 +12,14 @@ Listen {{ api_interface_address }}:{{ placement_api_port }}
= 2.4>
ErrorLogFormat "%{cu}t %M"
- ErrorLog "{{ log_dir }}/placement-api.log"
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b %D \"%{Referer}i\" \"%{User-Agent}i\"" logformat
+{% if std_logger %}
+ ErrorLog /proc/self/fd/2
+ CustomLog /proc/self/fd/1 combined
+{% else %}
+ ErrorLog "{{ log_dir }}/placement-api.log"
CustomLog "{{ log_dir }}/placement-api-access.log" logformat
+{% endif %}
Require all granted
diff --git a/ansible/roles/rabbitmq/templates/rabbitmq-env.conf.j2 b/ansible/roles/rabbitmq/templates/rabbitmq-env.conf.j2
index 3f382ea41..2281ccf00 100644
--- a/ansible/roles/rabbitmq/templates/rabbitmq-env.conf.j2
+++ b/ansible/roles/rabbitmq/templates/rabbitmq-env.conf.j2
@@ -1,6 +1,10 @@
RABBITMQ_NODENAME=rabbit
+{% if std_logger %}
+RABBITMQ_LOGS=-
+{% else %}
RABBITMQ_LOG_BASE=/var/log/kolla/rabbitmq
+{% endif %}
# TODO(sdake, vhosakot)
# erlang by default binds to wildcard (all interfaces) and can potentially