diff --git a/comanage-registry-internet2-tier/000-comanage.conf b/comanage-registry-internet2-tier/000-comanage.conf
index 7e967ab..b198062 100644
--- a/comanage-registry-internet2-tier/000-comanage.conf
+++ b/comanage-registry-internet2-tier/000-comanage.conf
@@ -19,6 +19,8 @@
 
 Listen 443
 ServerName %%SERVER_NAME%%
+PassEnv ENV
+PassEnv USERTOKEN
 
 <VirtualHost *:80>
 ServerName http://%%SERVER_NAME%%:80
@@ -31,16 +33,19 @@ RewriteRule ^ https://%{HTTP_HOST}:443%{REQUEST_URI} [R=302,L,QSA]
 
 ServerName https://%%SERVER_NAME%%:443
 
+PassEnv ENV
+PassEnv USERTOKEN
+
 DocumentRoot /var/www/html
 
 RedirectMatch ^/$ /registry/
 
-ErrorLogFormat "httpd ssl_error_log [%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i"
-ErrorLog logs/ssl_error_log
+ErrorLogFormat "httpd;ssl_error_log;%{ENV}e;%{USERTOKEN}e;[%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i"
+ErrorLog /tmp/logpipe
 LogLevel warn
 
-LogFormat "httpd ssl_access_log %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" ssl_combined
-CustomLog logs/ssl_access_log ssl_combined
+LogFormat "httpd;ssl_access_log;%{ENV}e;%{USERTOKEN}e;%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" ssl_combined
+CustomLog /tmp/logpipe ssl_combined
 
 Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
 
diff --git a/comanage-registry-internet2-tier/Dockerfile b/comanage-registry-internet2-tier/Dockerfile
index b01f63c..337f01d 100644
--- a/comanage-registry-internet2-tier/Dockerfile
+++ b/comanage-registry-internet2-tier/Dockerfile
@@ -98,10 +98,13 @@ RUN yum -y update && yum -y install \
         mod_ssl \
         mariadb-libs \
         postgresql \
+        python-pip \
         shibboleth \
-        supervisor \
         wget \
-        zlib
+        zlib \
+    && pip install --upgrade pip \
+    && pip install supervisor \
+    && yum clean -y all
 
 COPY --from=php-build /usr/lib64/httpd/modules/libphp7.so /usr/lib64/httpd/modules/
 COPY --from=php-build /usr/local/lib/php /usr/local/lib/php/
@@ -138,13 +141,7 @@ COPY shibd.logger /etc/shibboleth/
 COPY native.logger /etc/shibboleth/
 COPY httpd.conf /etc/httpd/conf/
 
-RUN ln -sfT /dev/stdout /var/log/httpd/access_log \
-    && ln -sfT /dev/stdout /var/log/httpd/error_log \
-    && ln -sfT /dev/stdout /var/log/httpd/ssl_error_log \
-    && ln -sfT /dev/stdout /var/log/httpd/ssl_access_log \
-    && ln -sfT /dev/stdout /var/log/shibboleth-www/native.log \
-    && ln -sfT /dev/stdout /var/log/shibboleth-www/native_warn.log \
-    && cd /etc/httpd/conf.d \
+RUN cd /etc/httpd/conf.d \
     && rm -f autoindex.conf ssl.conf userdir.conf welcome.conf \
     && cd /etc/httpd \
     && ln -s /etc/pki/tls/certs/localhost.crt cert.pem \
@@ -173,5 +170,6 @@ VOLUME ["/etc/shibboleth"]
 
 COPY docker-comanage-entrypoint /usr/local/bin/
 COPY docker-comanage-shibboleth-sp-entrypoint /usr/local/bin/
+COPY docker-supervisord-entrypoint /usr/local/bin/
 
-ENTRYPOINT ["/usr/bin/supervisord", "-c", "/usr/local/etc/supervisord.conf"]
+ENTRYPOINT ["docker-supervisord-entrypoint"]
diff --git a/comanage-registry-internet2-tier/docker-comanage-entrypoint b/comanage-registry-internet2-tier/docker-comanage-entrypoint
index b0cf49e..6191e13 100755
--- a/comanage-registry-internet2-tier/docker-comanage-entrypoint
+++ b/comanage-registry-internet2-tier/docker-comanage-entrypoint
@@ -43,9 +43,11 @@ injectable_config_vars=(
     COMANAGE_REGISTRY_EMAIL_ACCOUNT_PASSWORD
     COMANAGE_REGISTRY_SECURITY_SALT
     COMANAGE_REGISTRY_SECURITY_SEED
+    ENV
     HTTPS_CERT_FILE
     HTTPS_PRIVKEY_FILE
     SERVER_NAME
+    USERTOKEN
 )
 
 # If the file associated with a configuration variable is present then 
@@ -312,13 +314,37 @@ fi
 # Configure Apache HTTP Server with the server name.
 sed -i -e s@%%SERVER_NAME%%@"${SERVER_NAME:-unknown}"@g /etc/httpd/conf.d/000-comanage.conf
 
+# If ENV or USERTOKEN as injected by the deployer contain a semi-colon remove it.
+if [[ $ENV =~ .*";".* ]]; then
+    ENV=`echo $ENV | tr -d ';'`
+    export ENV
+fi
+
+if [[ $USERTOKEN =~ .*";".* ]]; then
+    USERTOKEN=`echo $USERTOKEN | tr -d ';'`
+    export USERTOKEN
+fi
+
+# If ENV or USERTOKEN as injected by the deployer contain a space remove it.
+if [[ $ENV =~ [[:space:]] ]]; then
+    ENV=`echo $ENV | tr -d [:space:]`
+    export ENV
+fi
+
+if [[ $USERTOKEN =~ [[:space:]] ]]; then
+    USERTOKEN=`echo $USERTOKEN | tr -d [:space:]`
+    export USERTOKEN
+fi
+
 # Create pipes to use for COmanage Registry instead of standard log files.
-mkfifo -m 666 /srv/comanage-registry/app/tmp/logs/error.log
-mkfifo -m 666 /srv/comanage-registry/app/tmp/logs/debug.log
+rm -f "$COMANAGE_REGISTRY_DIR/app/tmp/logs/error.log" > "$OUTPUT" 2>&1
+rm -f "$COMANAGE_REGISTRY_DIR/app/tmp/logs/debug.log" > "$OUTPUT" 2>&1
+mkfifo -m 666 "$COMANAGE_REGISTRY_DIR/app/tmp/logs/error.log" > "$OUTPUT" 2>&1
+mkfifo -m 666 "$COMANAGE_REGISTRY_DIR/app/tmp/logs/debug.log" > "$OUTPUT" 2>&1
 
 # Format any output from COmanange Registry into standard TIER form.
-(cat <> /srv/comanage-registry/app/tmp/logs/error.log | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "COmanage Registry error.log %s %s %s\n", ENV, UT, $0; fflush()}' 1>/dev/stdout)&
-(cat <> /srv/comanage-registry/app/tmp/logs/debug.log | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "COmanage Registry debug.log %s %s %s\n", ENV, UT, $0; fflush()}' 1>/dev/stdout)&
+(cat <> "$COMANAGE_REGISTRY_DIR/app/tmp/logs/error.log" | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "comanage_registry;error.log;%s;%s;%s\n", ENV, UT, $0; fflush()}' 1>/tmp/logpipe)&
+(cat <> "$COMANAGE_REGISTRY_DIR/app/tmp/logs/debug.log" | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "comanage_registry;debug.log;%s;%s;%s\n", ENV, UT, $0; fflush()}' 1>/tmp/logpipe)&
 
 # Start Apache HTTP Server
 exec /usr/sbin/httpd -DFOREGROUND
diff --git a/comanage-registry-internet2-tier/docker-comanage-shibboleth-sp-entrypoint b/comanage-registry-internet2-tier/docker-comanage-shibboleth-sp-entrypoint
index a7472bb..11527b8 100755
--- a/comanage-registry-internet2-tier/docker-comanage-shibboleth-sp-entrypoint
+++ b/comanage-registry-internet2-tier/docker-comanage-shibboleth-sp-entrypoint
@@ -100,15 +100,27 @@ if [ -n "$SHIBBOLETH_SP_PRIVKEY" ]; then
     chmod 0600 /etc/shibboleth/sp-key.pem
 fi
 
-# Send logging to container stdout.
-pushd /var/log/shibboleth
-/bin/rm -f shibd.log transaction.log shibd_warn.log signature.log
-/bin/ln -sfT /dev/stdout shibd.log
-/bin/ln -sfT /dev/stdout shibd_warn.log
-/bin/ln -sfT /dev/stdout transaction.log
-/bin/ln -sfT /dev/stdout signature.log
-chown shibd:shibd shibd.log transaction.log shibd_warn.log signature.log
-popd
+# If ENV or USERTOKEN as injected by the deployer contain a semi-colon remove it.
+if [[ $ENV =~ .*";".* ]]; then
+    ENV=`echo $ENV | tr -d ';'`
+    export ENV
+fi
+
+if [[ $USERTOKEN =~ .*";".* ]]; then
+    USERTOKEN=`echo $USERTOKEN | tr -d ';'`
+    export USERTOKEN
+fi
+
+# If ENV or USERTOKEN as injected by the deployer contain a space remove it.
+if [[ $ENV =~ [[:space:]] ]]; then
+    ENV=`echo $ENV | tr -d [:space:]`
+    export ENV
+fi
+
+if [[ $USERTOKEN =~ [[:space:]] ]]; then
+    USERTOKEN=`echo $USERTOKEN | tr -d [:space:]`
+    export USERTOKEN
+fi
 
 # Start the daemon.
 export LD_LIBRARY_PATH=/opt/shibboleth/lib64
diff --git a/comanage-registry-internet2-tier/docker-supervisord-entrypoint b/comanage-registry-internet2-tier/docker-supervisord-entrypoint
new file mode 100755
index 0000000..2a61c78
--- /dev/null
+++ b/comanage-registry-internet2-tier/docker-supervisord-entrypoint
@@ -0,0 +1,78 @@
+#!/bin/bash
+
+# COmanage Registry Dockerfile entrypoint
+#
+# Portions licensed to the University Corporation for Advanced Internet
+# Development, Inc. ("UCAID") under one or more contributor license agreements.
+# See the NOTICE file distributed with this work for additional information
+# regarding copyright ownership.
+#
+# UCAID licenses this file to you under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with the
+# License. You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if [ -n "$DEBUG" ]
+then
+    OUTPUT=/dev/stdout
+else
+    OUTPUT=/dev/null
+fi
+
+# If ENV or USERTOKEN as injected by the deployer contain a semi-colon remove it.
+if [[ $ENV =~ .*";".* ]]; then
+    ENV=`echo $ENV | tr -d ';'`
+    export ENV
+fi
+
+if [[ $USERTOKEN =~ .*";".* ]]; then
+    USERTOKEN=`echo $USERTOKEN | tr -d ';'`
+    export USERTOKEN
+fi
+
+# If ENV or USERTOKEN as injected by the deployer contain a space remove it.
+if [[ $ENV =~ [[:space:]] ]]; then
+    ENV=`echo $ENV | tr -d [:space:]`
+    export ENV
+fi
+
+if [[ $USERTOKEN =~ [[:space:]] ]]; then
+    USERTOKEN=`echo $USERTOKEN | tr -d [:space:]`
+    export USERTOKEN
+fi
+
+# Make a "console" logging pipe that anyone can write to regardless of who owns the process.
+rm -f /tmp/logpipe > "$OUTPUT" 2>&1
+mkfifo -m 666 /tmp/logpipe > "$OUTPUT" 2>&1
+cat <> /tmp/logpipe &
+
+# Format any console output from httpd into standard TIER form.
+rm -f /tmp/loghttpd > "$OUTPUT" 2>&1
+mkfifo -m 666 /tmp/loghttpd > "$OUTPUT" 2>&1
+(cat <> /tmp/loghttpd | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "httpd;console;%s;%s;%s\n", ENV, UT, $0; fflush()}' 1>/tmp/logpipe 2>&1)&
+
+# Format any console output from shibd into standard TIER form.
+rm -f /tmp/logshibd > "$OUTPUT" 2>&1
+mkfifo -m 666 /tmp/logshibd > "$OUTPUT" 2>&1
+(cat <> /tmp/logshibd | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "httpd;console;%s;%s;%s\n", ENV, UT, $0; fflush()}' 1>/tmp/logpipe 2>&1)&
+
+# Format any console output from supervisord into standard TIER form.
+rm -f /tmp/logsuperd > "$OUTPUT" 2>&1
+mkfifo -m 666 /tmp/logsuperd > "$OUTPUT" 2>&1
+(cat <> /tmp/logsuperd | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "supervisord;console;%s;%s;%s\n", ENV, UT, $0; fflush()}' 1>/tmp/logpipe 2>&1)&
+
+# Close stdout and stderr for this process since supervisord will write
+# to its logfile and its children are configured to write to different
+# pipes.
+exec 1<&-
+exec 2<&-
+
+# Start supervisord
+exec /usr/bin/supervisord -c /usr/local/etc/supervisord.conf
diff --git a/comanage-registry-internet2-tier/httpd.conf b/comanage-registry-internet2-tier/httpd.conf
index 67ed694..3cbc05a 100644
--- a/comanage-registry-internet2-tier/httpd.conf
+++ b/comanage-registry-internet2-tier/httpd.conf
@@ -49,12 +49,15 @@ DirectoryIndex index.html
     Require all denied
 </Files>
 
-ErrorLogFormat "httpd error_log [%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i"
-ErrorLog "logs/error_log"
+PassEnv ENV
+PassEnv USERTOKEN
+
+ErrorLogFormat "httpd;error_log;%{ENV}e;%{USERTOKEN}e;[%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i"
+ErrorLog "/tmp/logpipe"
 LogLevel warn
 
-LogFormat "httpd access_log %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
-CustomLog "logs/access_log" combined
+LogFormat "httpd;access_log;%{ENV}e;%{USERTOKEN}e;%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
+CustomLog "/tmp/logpipe" combined
 
 TypesConfig /etc/mime.types
 AddType application/x-compress .Z
diff --git a/comanage-registry-internet2-tier/native.logger b/comanage-registry-internet2-tier/native.logger
index 07efe77..0b01f32 100644
--- a/comanage-registry-internet2-tier/native.logger
+++ b/comanage-registry-internet2-tier/native.logger
@@ -28,12 +28,12 @@ log4j.category.XMLTooling.libcurl=INFO
 # define the appender
 
 log4j.appender.native_log=org.apache.log4j.FileAppender
-log4j.appender.native_log.fileName=/var/log/shibboleth-www/native.log
+log4j.appender.native_log.fileName=/tmp/logpipe
 log4j.appender.native_log.layout=org.apache.log4j.PatternLayout
-log4j.appender.native_log.layout.ConversionPattern=shibd native.log %d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
+log4j.appender.native_log.layout.ConversionPattern=shibd;native.log;${ENV};${USERTOKEN};%d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
 
 log4j.appender.warn_log=org.apache.log4j.FileAppender
-log4j.appender.warn_log.fileName=/var/log/shibboleth-www/native_warn.log
+log4j.appender.warn_log.fileName=/tmp/logpipe
 log4j.appender.warn_log.layout=org.apache.log4j.PatternLayout
-log4j.appender.warn_log.layout.ConversionPattern=shibd native_warn.log %d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
+log4j.appender.warn_log.layout.ConversionPattern=shibd;native_warn.log;${ENV};${USERTOKEN};%d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
 log4j.appender.warn_log.threshold=WARN
diff --git a/comanage-registry-internet2-tier/shibd.logger b/comanage-registry-internet2-tier/shibd.logger
index bcfae12..41300f2 100644
--- a/comanage-registry-internet2-tier/shibd.logger
+++ b/comanage-registry-internet2-tier/shibd.logger
@@ -42,22 +42,22 @@ log4j.additivity.Shibboleth-TRANSACTION=false
 # define the appenders
 
 log4j.appender.shibd_log=org.apache.log4j.FileAppender
-log4j.appender.shibd_log.fileName=/var/log/shibboleth/shibd.log
+log4j.appender.shibd_log.fileName=/tmp/logpipe
 log4j.appender.shibd_log.layout=org.apache.log4j.PatternLayout
-log4j.appender.shibd_log.layout.ConversionPattern=shibd shibd.log %d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
+log4j.appender.shibd_log.layout.ConversionPattern=shibd;shibd.log;${ENV};${USERTOKEN};%d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
 
 log4j.appender.warn_log=org.apache.log4j.FileAppender
-log4j.appender.warn_log.fileName=/var/log/shibboleth/shibd_warn.log
+log4j.appender.warn_log.fileName=/tmp/logpipe
 log4j.appender.warn_log.layout=org.apache.log4j.PatternLayout
-log4j.appender.warn_log.layout.ConversionPattern=shibd shibd_warn.log %d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
+log4j.appender.warn_log.layout.ConversionPattern=shibd;shibd_warn.log;${ENV};${USERTOKEN};%d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
 log4j.appender.warn_log.threshold=WARN
 
 log4j.appender.tran_log=org.apache.log4j.FileAppender
-log4j.appender.tran_log.fileName=/var/log/shibboleth/transaction.log
+log4j.appender.tran_log.fileName=/tmp/logpipe
 log4j.appender.tran_log.layout=org.apache.log4j.PatternLayout
-log4j.appender.tran_log.layout.ConversionPattern=shibd transaction.log %d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
+log4j.appender.tran_log.layout.ConversionPattern=shibd;transaction.log;${ENV};${USERTOKEN};%d{%Y-%m-%d %H:%M:%S} %p %c %x: %m%n
 
 log4j.appender.sig_log=org.apache.log4j.FileAppender
-log4j.appender.sig_log.fileName=/var/log/shibboleth/signature.log
+log4j.appender.sig_log.fileName=/tmp/logpipe
 log4j.appender.sig_log.layout=org.apache.log4j.PatternLayout
-log4j.appender.sig_log.layout.ConversionPattern=shibd signature.log %m
+log4j.appender.sig_log.layout.ConversionPattern=shibd;signature.log${ENV};${USERTOKEN};%m
diff --git a/comanage-registry-internet2-tier/supervisord.conf b/comanage-registry-internet2-tier/supervisord.conf
index 1fbc238..c79698e 100644
--- a/comanage-registry-internet2-tier/supervisord.conf
+++ b/comanage-registry-internet2-tier/supervisord.conf
@@ -18,19 +18,21 @@
 ; limitations under the License.
 
 [supervisord]
+logfile=/tmp/logsuperd
+logfile_maxbytes=0
 nodaemon=true
 user=root
 
 [program:httpd]
 command=/usr/local/bin/docker-comanage-entrypoint
-stdout_logfile=/dev/stdout
+stdout_logfile=/tmp/loghttpd
 stdout_logfile_maxbytes=0
-stderr_logfile=/dev/stderr
+stderr_logfile=/tmp/loghttpd
 stderr_logfile_maxbytes=0
 
 [program:shibd]
 command=/usr/local/bin/docker-comanage-shibboleth-sp-entrypoint
-stdout_logfile=/dev/stdout
+stdout_logfile=/tmp/logshibd
 stdout_logfile_maxbytes=0
-stderr_logfile=/dev/stderr
+stderr_logfile=/tmp/logshibd
 stderr_logfile_maxbytes=0