Chapter 12. Enabling Logshifter
README
file.
java
or mongod
. To take advantage of logshifter, redirect the standard out (STDOUT) and standard error (STEDRR) streams of the process to the /usr/bin/logshifter
file. For example, for a Java-based cartridge:
Example 12.1. Redirecting Logs Using Logshifter:
java ... |& /usr/bin/logshifter -tag my-cartridge &
java
is started in the background, and all output produced by the application is logged through logshifter. The -tag
argument must be a string unique to the cartridge.
In the example above, the standard pipe operator is used from a shell script to redirect logs from the cartridge process to logshifter
. This works well for programs which are capable of managing a PID file internally. However, for cartridges which bootstrap a process and cannot manage a PID file by itself, using a simple pipe operator can be problematic. When piping programs using a shell, the programs are typically started in parallel, rendering the $!
variable unreliable for determining the PID of the cartridge process. For these cases, setting up a named pipe can allow the cartridge to use logshifter
and also manage the PID of the process. The following example demonstrates the setup of a named pipe used by a Java cartridge which preserves the reliability of $!
so the cartridge script can manage the PID file manually:
Example 12.2. Setting Up Named Pipe:
LOGPIPE=${OPENSHIFT_HOMEDIR}/app-root/runtime/logshifter-my-cartridge rm -f $LOGPIPE && mkfifo $LOGPIPE /usr/bin/logshifter -tag my-cartridge < $LOGPIPE & java ... &> $LOGPIPE & echo $! > $OPENSHIFT_MY_CARTRIDGE_DIR/my-cartridge.pid
logshifter
and cartridge processes.