rotator

Piped log rotation utility


License
Other
Install
pip install rotator==0.1.0

Documentation

Rotator

Piped log rotation

It can sometimes be tricky and invasive to implement log rotation, especially if there are forked processes involved. What's significantly easier is writing logs to stdout and having another utility manage where those logs live.

In particular, we encoutered a problem where we wanted to track the logs of a process that forked child process to do work. This really makes life complicated for log rotation, and so the easiest way to deal with it was to have every process write to stdout, inherited from the parent process, and let a separate utility deal with it.

Usage

There are three modes that rotator supports: signaled, watched and rotated. They're all implemented as subcommands of the rotator binary.

Signaled

In signaled mode, a configurable signal can be sent to the process to indicate that the file needs to be reopened:

my-awesome-program | rotator signaled /path/to/log --sig USR1

From another process:

# Rotate the file
mv /path/to/log /to/somewhere/else
kill -USR1 <pid>

Rotated

In rotated mode, the utility does all the rotation for itself making use of the provided size and count. For example, this would keep up to 5 logs files at /path/to/log.{1,2,3,4,5}:

my-awesome-program | rotator rotated /path/to/log --size 1MB --count 5

Watched

This mode actually checks whether the path's inode has changed, and thus has to be reopened. It's a pretty expensive operation, but it is available:

my-awesome-program | rotator watched /path/to/log

In order to do the rotation in this case:

# The utility automatically detects that the path has moved
mv /path/to/log /to/somewhere/else

Installation

You can install rotator from pip:

sudo pip install rotator

Or from github:

git clone https://github.com/dlecocq/rotator
cd rotator
sudo python setup.py install