Rotating File Sink
Write logs to disk with size/time rotation.
Quick Start (Convenience Function)
from fapilog import get_logger
from fapilog.sinks import rotating_file
# Simple file logging
logger = get_logger(sinks=[rotating_file("logs/app.log")])
# With rotation and retention
logger = get_logger(
sinks=[
rotating_file(
"logs/app.log",
rotation="10 MB",
retention=7,
compression=True,
)
]
)
Enable via environment
export FAPILOG_FILE__DIRECTORY=/var/log/myapp
export FAPILOG_FILE__MAX_BYTES="10 MB"
export FAPILOG_FILE__MAX_FILES=5
export FAPILOG_FILE__COMPRESS_ROTATED=true
# Optional time-based rotation
export FAPILOG_FILE__INTERVAL_SECONDS="daily"
"daily"/"hourly"/"weekly" are fixed intervals (e.g., 24 hours), not wall-clock boundaries.
Programmatic settings
from fapilog import Settings, get_logger
from fapilog.core.settings import RotatingFileSettings
settings = Settings(
sink_config=Settings.SinkConfig(
rotating_file=RotatingFileSettings(
directory="logs",
filename_prefix="app",
max_bytes="10 MB",
max_files=7,
compress_rotated=True,
)
)
)
logger = get_logger(settings=settings)
logger.info("configured via Settings")
Usage
from fapilog import get_logger
logger = get_logger()
logger.info("to file", event="startup")
Direct Class Usage
For full control, instantiate the sink class directly:
from pathlib import Path
from fapilog.plugins.sinks.rotating_file import RotatingFileSink, RotatingFileSinkConfig
config = RotatingFileSinkConfig(
directory=Path("./logs"),
filename_prefix="app",
max_bytes=10_000_000, # 10 MB
max_files=5,
compress_rotated=True,
)
sink = RotatingFileSink(config)
Config fields: directory, filename_prefix, mode, max_bytes, interval_seconds, max_files, max_total_bytes, compress_rotated, strict_envelope_mode.
Migration
See docs/guides/migration-file-rotation.md for a before/after conversion from
RotatingFileSinkConfig to the rotating_file() convenience factory.
What to expect
Files named like
fapilog-20250111-120000.jsonl(or.login text mode).Rotation by size (
max_bytes) or interval; optional retention and compression.
Tips
Ensure the directory exists and is writable by the app user.
Set
FAPILOG_FILE__MODEtojson(default) for structured output.For containers, ensure volume mounts persist
/var/log/myapp.