Skip to content

Log Rotation

Prevent unbounded file growth by rotating logs automatically.

Size-Based Rotation

python
from logly import logger

sink_id = logger.add("app.log", rotation="10 MB")
logger.info("Rotates when file exceeds 10 MB")
logger.complete()
logger.remove(sink_id)

Supported size units: "10 MB", "500 KB", "1 GB", "500_000" (bytes)

Time-Based Rotation

python
from logly import logger

# Rotate every day at midnight
sink_id = logger.add("daily.log", rotation="daily")

# Rotate every hour
sink_id2 = logger.add("hourly.log", rotation="hourly")

# Rotate every minute
sink_id3 = logger.add("minute.log", rotation="minutely")

logger.info("Time-based rotation active")
logger.complete()
logger.remove(sink_id)
logger.remove(sink_id2)
logger.remove(sink_id3)

Clock-Based Rotation

python
from logly import logger

# Rotate at a specific clock time
sink_id = logger.add("scheduled.log", rotation="00:00")
logger.info("Rotates at midnight")
logger.complete()
logger.remove(sink_id)

Other clock examples: "02:30", "12:00", "18:45"

Weekday Rotation

python
from logly import logger

# Rotate every Monday
sink_id = logger.add("weekly.log", rotation="weekly")
logger.info("Weekly rotation")
logger.complete()
logger.remove(sink_id)

Supported weekday names: "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"

Size + Time Rotation

python
from logly import logger

sink_id = logger.add(
    "app.log",
    rotation="50 MB",  # rotate at 50 MB
)
logger.info("Size-based rotation")
logger.complete()
logger.remove(sink_id)

Clock + Retention

python
from logly import logger

sink_id = logger.add(
    "app.log",
    rotation="02:00",  # rotate at 2 AM
    retention=14,  # keep 14 files
)
logger.info("Clock rotation + retention")
logger.complete()
logger.remove(sink_id)

Size + Retention + Compression

python
from logly import logger

sink_id = logger.add(
    "logs/app.log",
    rotation="100 MB",
    retention=30,
    compression="gzip",
)
logger.info("Size rotation + 30-file retention + gzip")
logger.complete()
logger.remove(sink_id)

Daily + Retention + Compression

python
from logly import logger

sink_id = logger.add(
    "logs/app.log",
    rotation="daily",
    retention="30 days",
    compression="zstd",
)
logger.info("Daily rotation + 30-day retention + zstd")
logger.complete()
logger.remove(sink_id)

Weekly + Retention

python
from logly import logger

sink_id = logger.add(
    "logs/app.log",
    rotation="weekly",
    retention=8,  # keep 8 weeks
)
logger.info("Weekly rotation + 8-week retention")
logger.complete()
logger.remove(sink_id)

No Rotation

python
from logly import logger

sink_id = logger.add(
    "app.log",
    rotation=None,  # explicitly disable rotation
)
logger.info("No rotation - file grows indefinitely")
logger.complete()
logger.remove(sink_id)

Overwrite Mode

python
from logly import logger

sink_id = logger.add(
    "app.log",
    rotation="daily",
    mode="w",  # overwrite on startup
)
logger.info("File overwritten on startup, then rotated daily")
logger.complete()
logger.remove(sink_id)

Combine rotation with retention

Use retention alongside rotation to auto-delete old files:

python
logger.add("app.log", rotation="daily", retention=14)

Released under the MIT License.