Skip to content

Append/Overwrite with Rotation ​

This example demonstrates how different write modes interact with file rotation in Logly.zig.

Write Modes ​

ModeBehaviorUse Case
.appendAppend to existing filePersistent logs, audit trails
.overwriteTruncate on startupSession logs, debug output
.append_rotateAppend with rotation triggerExplicit rotation control

Code Example ​

zig
const std = @import("std");
const logly = @import("logly");

pub fn main() !void {
    var gpa = std.heap.DebugAllocator(.{}){};
    defer _ = gpa.deinit();
    const allocator = gpa.allocator();

    const logger = try logly.Logger.initWithConfig(allocator, logly.Config.default());
    defer logger.deinit();

    // Append mode with daily rotation
    var sink_append = logly.SinkConfig.file("app.log");
    sink_append.write_mode = .append;
    sink_append.rotation = "daily";
    sink_append.retention = 7;
    _ = try logger.addSink(sink_append);

    // Overwrite mode with size rotation
    var sink_overwrite = logly.SinkConfig.file("session.log");
    sink_overwrite.write_mode = .overwrite;
    sink_overwrite.size_limit = 1024 * 1024; // 1MB
    sink_overwrite.retention = 3;
    _ = try logger.addSink(sink_overwrite);

    try logger.info("Logged to both sinks", @src());
}

How Rotation Works ​

After rotation, the old file is renamed (e.g., app.log.2026-08-05) and a new fresh file is created. This behavior is consistent across all write modes.

Write ModeInitial BehaviorAfter Rotation
.appendAppend to existing fileNew file starts fresh
.overwriteTruncate file on startupNew file starts fresh
.append_rotateAppend with rotation triggerNew file starts fresh

Expected Output ​

app.log              - Append mode, grows over time
app.log.2026-08-05   - Rotated daily, archived
session.log          - Overwrite mode, fresh each run

See Also ​

Released under the MIT License.