GNU Screen logtstamp string
A short note on GNU Screen configuration:
You can add configuration to
~/.screenrc or another configuration file named by
-c $filename upon invocation, and among the many options are some to enable logging what happens in the screen windows. This is useful when using screen as a reattachable daemonizer.
Consider this configuration:
logfile path/to/screen-output.%Y%m%d.log logfile flush 1 logtstamp on logtstamp after 5 log on
That works nicely. With
logfile we specify the name of the log file, using some
% escapes as per “STRING ESCAPES” in the manpage to put the date in the logfile name.
logfile flush 1 we request that every 1 second the output be flushed to the log, making it easier to follow with
logtstamp on option writes a timestamp to the log after a default 2 minutes of inactivity. We shorten that to 5 seconds with
logtstamp after 5.
log on turns on the logging.
Now, what if we want to customize the timestamp? The default looks like this:
-- 0:process-name -- time-stamp -- Jul/24/13 9:09:56 --
The manpage says that can be customized with
logtstampt string ..., where the default is:
-- %n:%t -- time-stamp -- %M/%d/%y %c:%s --\n
The manpage earlier says that arguments may be separated by single or double quotes. Doing so with the default shown doesn’t work, because a literal \n shows up in the logfile.
The solution I worked out by trial and error is that you must double-quote the string and use octal escape value
\012. Single-quoting that will output a literal backslash 0 1 2, and
\n simply is not a recognized escape. Thus our final configuration directive is:
logtstamp string "-- time-stamp -- %Y-%m-%d %0c:%s --\012"
which results in output like:
-- time-stamp -- 2013-07-24 09:59:35 --
If you use more than one screen window with this configuration, all windows’ output will go into the same logfile. Use the
%n escape string to include a window number in the logfile name if you’d like them kept separate.