Log rotation with rsyslog

Written by Michael Meckelein

Situation

Your environment does not allow you to store tons of logs? You have limited disc space available for logging, for example you want to log to a 124 MB RAM usb stick? Or you do not want to keep all the logs for months, logs from the last days is sufficient? Think about log rotation.

Log rotation based on a fixed log size

This small but hopefully useful article will show you the way to keep your logs at a given size. The following sample is based on rsyslog illustrating a simple but effective log rotation with a maximum size condition.

Use Rainerscript rotation parameters for fixed-length syslog files

Lets assume you do not want to spend more than 100 MB hard disc space for you logs. With rsyslog you can configure the rotation.sizeLimit and rotation.sizeLimitCommand parameters of the omfile action to achieve this. The Rainerscript fragment below writes all messages to a file and rotates it once the size limit is exceeded.

action(
    type="omfile"
    file="/var/log/log_rotation.log"
    rotation.sizeLimit="52428800"        # 50 MiB per file
    rotation.sizeLimitCommand="/home/me/log_rotation_script"
    template="RSYSLOG_TraditionalFileFormat"
)

When the configured limit is reached, rsyslog executes the command specified in rotation.sizeLimitCommand. In our case it runs /home/me/log_rotation_script which contains a single command:

mv -f /var/log/log_rotation.log /var/log/log_rotation.log.1

This moves the original log to a kind of backup log file. After the action was successfully performed rsyslog creates a new /var/log/log_rotation.log file and fills it with new logs. So the latest logs are always in log_rotation.log. The two rotation parameters are documented in rotation.sizeLimit and rotation.sizeLimitCommand.

Note

Older examples use the $outchannel directive. That syntax maps to the same rotation parameters shown above but is kept solely for backward compatibility. New configurations should always use Rainerscript objects and attributes.

Conclusion

With this approach two files for logging are used, each with a maximum size of 50 MB. So we can say we have successfully configured a log rotation which satisfies our requirement. We keep the logs at a fixed-size level of 100 MB.


Support: rsyslog Assistant | GitHub Discussions | GitHub Issues: rsyslog source project

Contributing: Source & docs: rsyslog source project

© 2008–2025 Rainer Gerhards and others. Licensed under the Apache License 2.0.