Deprecate SCREEN_LOGDIR in favor of LOGDIR
This is the first step in the log file cleanup. If SCREEN_LOGDIR
is still set, symlinks will be created in the old screen log directory
so things like the devstack-gate log collector continues to work.
bp:logging-and-service-names
Change-Id: I3ac796e322a18dbd0b8b2310a08310ca159d7613
diff --git a/doc/source/configuration.rst b/doc/source/configuration.rst
index baebe97..7dbb588 100644
--- a/doc/source/configuration.rst
+++ b/doc/source/configuration.rst
@@ -200,22 +200,19 @@
LOG_COLOR=False
-Logging the Screen Output
--------------------------
+Logging the Service Output
+--------------------------
- | *Default: ``SCREEN_LOGDIR=""``*
- | By default DevStack runs the OpenStack services using ``screen``
- which is useful for watching log and debug output. However, in
- automated testing the interactive ``screen`` sessions may not be
- available after the fact; setting ``SCREEN_LOGDIR`` enables logging
- of the ``screen`` sessions in the specified directory. There will be
- one file per ``screen`` session named for the session name and a
- timestamp.
+ | *Default: ``LOGDIR=""``*
+ | DevStack will log the stdout output of the services it starts.
+ When using ``screen`` this logs the output in the screen windows
+ to a file. Without ``screen`` this simply redirects stdout of
+ the service process to a file in ``LOGDIR``.
|
::
- SCREEN_LOGDIR=$DEST/logs/screen
+ LOGDIR=$DEST/logs
*Note the use of ``DEST`` to locate the main install directory; this
is why we suggest setting it in ``local.conf``.*
@@ -413,8 +410,8 @@
FIXED_RANGE=10.254.1.0/24
NETWORK_GATEWAY=10.254.1.1
LOGDAYS=1
- LOGFILE=$DEST/logs/stack.sh.log
- SCREEN_LOGDIR=$DEST/logs/screen
+ LOGDIR=$DEST/logs
+ LOGFILE=$LOGDIR/stack.sh.log
ADMIN_PASSWORD=quiet
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
diff --git a/functions-common b/functions-common
index 44d5671..8d54473 100644
--- a/functions-common
+++ b/functions-common
@@ -319,8 +319,8 @@
set +o xtrace
local msg="[ERROR] ${BASH_SOURCE[2]}:$1 $2"
echo $msg 1>&2;
- if [[ -n ${SCREEN_LOGDIR} ]]; then
- echo $msg >> "${SCREEN_LOGDIR}/error.log"
+ if [[ -n ${LOGDIR} ]]; then
+ echo $msg >> "${LOGDIR}/error.log"
fi
$xtrace
return $exitcode
@@ -372,8 +372,8 @@
set +o xtrace
local msg="[WARNING] ${BASH_SOURCE[2]}:$1 $2"
echo $msg 1>&2;
- if [[ -n ${SCREEN_LOGDIR} ]]; then
- echo $msg >> "${SCREEN_LOGDIR}/error.log"
+ if [[ -n ${LOGDIR} ]]; then
+ echo $msg >> "${LOGDIR}/error.log"
fi
$xtrace
return $exitcode
@@ -1261,8 +1261,8 @@
# _run_process() is designed to be backgrounded by run_process() to simulate a
# fork. It includes the dirty work of closing extra filehandles and preparing log
# files to produce the same logs as screen_it(). The log filename is derived
-# from the service name and global-and-now-misnamed ``SCREEN_LOGDIR``
-# Uses globals ``CURRENT_LOG_TIME``, ``SCREEN_LOGDIR``, ``SCREEN_NAME``, ``SERVICE_DIR``
+# from the service name.
+# Uses globals ``CURRENT_LOG_TIME``, ``LOGDIR``, ``SCREEN_LOGDIR``, ``SCREEN_NAME``, ``SERVICE_DIR``
# If an optional group is provided sg will be used to set the group of
# the command.
# _run_process service "command-line" [group]
@@ -1277,9 +1277,14 @@
exec 3>&-
exec 6>&-
- if [[ -n ${SCREEN_LOGDIR} ]]; then
- exec 1>&${SCREEN_LOGDIR}/screen-${service}.log.${CURRENT_LOG_TIME} 2>&1
- ln -sf ${SCREEN_LOGDIR}/screen-${service}.log.${CURRENT_LOG_TIME} ${SCREEN_LOGDIR}/screen-${service}.log
+ local real_logfile="${LOGDIR}/${service}.log.${CURRENT_LOG_TIME}"
+ if [[ -n ${LOGDIR} ]]; then
+ exec 1>&"$real_logfile" 2>&1
+ ln -sf "$real_logfile" ${LOGDIR}/${service}.log
+ if [[ -n ${SCREEN_LOGDIR} ]]; then
+ # Drop the backward-compat symlink
+ ln -sf "$real_logfile" ${SCREEN_LOGDIR}/screen-${service}.log
+ fi
# TODO(dtroyer): Hack to get stdout from the Python interpreter for the logs.
export PYTHONUNBUFFERED=1
@@ -1343,7 +1348,7 @@
}
# Helper to launch a process in a named screen
-# Uses globals ``CURRENT_LOG_TIME``, ``SCREEN_NAME``, ``SCREEN_LOGDIR``,
+# Uses globals ``CURRENT_LOG_TIME``, ```LOGDIR``, ``SCREEN_LOGDIR``, `SCREEN_NAME``,
# ``SERVICE_DIR``, ``USE_SCREEN``
# screen_process name "command-line" [group]
# Run a command in a shell in a screen window, if an optional group
@@ -1362,10 +1367,18 @@
screen -S $SCREEN_NAME -X screen -t $name
- if [[ -n ${SCREEN_LOGDIR} ]]; then
- screen -S $SCREEN_NAME -p $name -X logfile ${SCREEN_LOGDIR}/screen-${name}.log.${CURRENT_LOG_TIME}
+ local real_logfile="${LOGDIR}/${name}.log.${CURRENT_LOG_TIME}"
+ echo "LOGDIR: $LOGDIR"
+ echo "SCREEN_LOGDIR: $SCREEN_LOGDIR"
+ echo "log: $real_logfile"
+ if [[ -n ${LOGDIR} ]]; then
+ screen -S $SCREEN_NAME -p $name -X logfile "$real_logfile"
screen -S $SCREEN_NAME -p $name -X log on
- ln -sf ${SCREEN_LOGDIR}/screen-${name}.log.${CURRENT_LOG_TIME} ${SCREEN_LOGDIR}/screen-${name}.log
+ ln -sf "$real_logfile" ${LOGDIR}/${name}.log
+ if [[ -n ${SCREEN_LOGDIR} ]]; then
+ # Drop the backward-compat symlink
+ ln -sf "$real_logfile" ${SCREEN_LOGDIR}/screen-${1}.log
+ fi
fi
# sleep to allow bash to be ready to be send the command - we are
@@ -1410,8 +1423,8 @@
echo "screen -t $1 bash" >> $SCREENRC
echo "stuff \"$2$NL\"" >> $SCREENRC
- if [[ -n ${SCREEN_LOGDIR} ]]; then
- echo "logfile ${SCREEN_LOGDIR}/screen-${1}.log.${CURRENT_LOG_TIME}" >>$SCREENRC
+ if [[ -n ${LOGDIR} ]]; then
+ echo "logfile ${LOGDIR}/${1}.log.${CURRENT_LOG_TIME}" >>$SCREENRC
echo "log on" >>$SCREENRC
fi
fi
diff --git a/lib/dstat b/lib/dstat
index a17125f..d1db469 100644
--- a/lib/dstat
+++ b/lib/dstat
@@ -27,8 +27,12 @@
function start_dstat {
# A better kind of sysstat, with the top process per time slice
DSTAT_OPTS="-tcmndrylpg --top-cpu-adv --top-io-adv"
- if [[ -n ${SCREEN_LOGDIR} ]]; then
- screen_it dstat "cd $TOP_DIR; dstat $DSTAT_OPTS | tee $SCREEN_LOGDIR/$DSTAT_FILE"
+ if [[ -n ${LOGDIR} ]]; then
+ screen_it dstat "cd $TOP_DIR; dstat $DSTAT_OPTS | tee $LOGDIR/$DSTAT_FILE"
+ if [[ -n ${SCREEN_LOGDIR} ]]; then
+ # Drop the backward-compat symlink
+ ln -sf $LOGDIR/$DSTAT_FILE ${SCREEN_LOGDIR}/$DSTAT_FILE
+ fi
else
screen_it dstat "dstat $DSTAT_OPTS"
fi
diff --git a/stack.sh b/stack.sh
index aeaaf60..558b07e 100755
--- a/stack.sh
+++ b/stack.sh
@@ -373,10 +373,8 @@
# Append '.xxxxxxxx' to the given name to maintain history
# where 'xxxxxxxx' is a representation of the date the file was created
TIMESTAMP_FORMAT=${TIMESTAMP_FORMAT:-"%F-%H%M%S"}
-if [[ -n "$LOGFILE" || -n "$SCREEN_LOGDIR" ]]; then
- LOGDAYS=${LOGDAYS:-7}
- CURRENT_LOG_TIME=$(date "+$TIMESTAMP_FORMAT")
-fi
+LOGDAYS=${LOGDAYS:-7}
+CURRENT_LOG_TIME=$(date "+$TIMESTAMP_FORMAT")
if [[ -n "$LOGFILE" ]]; then
# Clean up old log files. Append '.*' to the user-specified
@@ -428,6 +426,7 @@
# ``screen-$SERVICE_NAME-$TIMESTAMP.log`` in that dir and have a link
# ``screen-$SERVICE_NAME.log`` to the latest log file.
# Logs are kept for as long specified in ``LOGDAYS``.
+# This is deprecated....logs go in ``LOGDIR``, only symlinks will be here now.
if [[ -n "$SCREEN_LOGDIR" ]]; then
# We make sure the directory is created.
diff --git a/stackrc b/stackrc
index 2dd56e8..ff82140 100644
--- a/stackrc
+++ b/stackrc
@@ -705,6 +705,53 @@
# Following entries need to be last items in file
+# Compatibility bits required by other callers like Grenade
+
+# Old way was using SCREEN_LOGDIR to locate those logs and LOGFILE for the stack.sh trace log.
+# LOGFILE SCREEN_LOGDIR output
+# not set not set no log files
+# set not set stack.sh log to LOGFILE
+# not set set screen logs to SCREEN_LOGDIR
+# set set stack.sh log to LOGFILE, screen logs to SCREEN_LOGDIR
+
+# New way is LOGDIR for all logs and LOGFILE for stack.sh trace log, but if not fully-qualified will be in LOGDIR
+# LOGFILE LOGDIR output
+# not set not set (new) set LOGDIR from default
+# set not set stack.sh log to LOGFILE, (new) set LOGDIR from LOGFILE
+# not set set screen logs to LOGDIR
+# set set stack.sh log to LOGFILE, screen logs to LOGDIR
+
+# For compat, if SCREEN_LOGDIR is set, it will be used to create back-compat symlinks to the LOGDIR
+# symlinks to SCREEN_LOGDIR (compat)
+
+
+# Set up new logging defaults
+if [[ -z "${LOGDIR:-}" ]]; then
+ default_logdir=$DEST/logs
+ if [[ -z "${LOGFILE:-}" ]]; then
+ # Nothing is set, we need a default
+ LOGDIR="$default_logdir"
+ else
+ # Set default LOGDIR
+ LOGDIR="${LOGFILE%/*}"
+ logfile="${LOGFILE##*/}"
+ if [[ -z "$LOGDIR" || "$LOGDIR" == "$logfile" ]]; then
+ # LOGFILE had no path, set a default
+ LOGDIR="$default_logdir"
+ fi
+
+ # Check for duplication
+ if [[ "${SCREEN_LOGDIR:-}" == "${LOGDIR}" ]]; then
+ # We don't need the symlinks since it's the same directory
+ unset SCREEN_LOGDIR
+ fi
+ fi
+ unset default_logdir logfile
+fi
+
+# LOGDIR is always set at this point so it is not useful as a 'enable' for service logs
+# SCREEN_LOGDIR may be set, it is useful to enable the compat symlinks
+
# Local variables:
# mode: shell-script
# End: