sivel/zprint
Thread-safe print utilities for Zig CLI applications with formatted printing to stdout and stderr
Thread-safe print utilities for Zig CLI applications with formatted printing to stdout and stderr.
WriterConfig
allows custom file handles with their own mutexesAdd zprint to your project using zig fetch
:
zig fetch --save https://github.com/sivel/zprint/archive/v0.1.0.tar.gz
Then in your build.zig
, add the dependency:
const zprint = b.dependency("zprint", .{});
exe.root_module.addImport("zprint", zprint.module("zprint"));
const zprint = @import("zprint");
// Print to stdout with error handling
try zprint.stdout("Hello {s}! Number: {d}\n", .{ "world", 42 });
// Print to stderr with error handling
try zprint.stderr("Error: {s}\n", .{"something went wrong"});
// Debug versions that silently ignore errors
zprint.debug.stdout("Debug message to stdout\n", .{});
zprint.debug.stderr("Debug message to stderr\n", .{});
const std = @import("std");
const zprint = @import("zprint");
// Example: Custom log file writer
var log_file = try std.fs.cwd().createFile("app.log", .{});
defer log_file.close();
var log_mutex = std.Thread.Mutex.Recursive.init;
var log_buffer: [1024]u8 = undefined;
var log_file_writer = log_file.writer(&log_buffer);
const log_config = zprint.WriterConfig{
.mutex = &log_mutex,
.writer = &log_file_writer.interface,
};
// Use the custom config
try zprint.print(log_config, "Log entry: {s}\n", .{"custom message"});
const std = @import("std");
const zprint = @import("zprint");
// Capture output to a buffer for testing
var output_buffer: [512]u8 = undefined;
var test_mutex = std.Thread.Mutex.Recursive.init;
var test_writer = std.Io.Writer.fixed(output_buffer[0..]);
const test_config = zprint.WriterConfig{
.mutex = &test_mutex,
.writer = &test_writer,
};
try zprint.print(test_config, "Test: {d}\n", .{42});
// Verify output
const written = output_buffer[0..test_writer.end];
// written contains: "Test: 42\n"
stdout(fmt, args) !void
- Print to stdout with error handlingstderr(fmt, args) !void
- Print to stderr with error handlingprint(config, fmt, args) !void
- Core function using a WriterConfig (thread-safe, with flushing)debug.stdout(fmt, args) void
- Print to stdout, ignore errorsdebug.stderr(fmt, args) void
- Print to stderr, ignore errorsWriterConfig
- Configuration struct containing:mutex: *std.Thread.Mutex.Recursive
- Mutex for thread safetywriter: *std.Io.Writer
- The writer interface to useZig's standard library provides std.debug.print
for debugging (stderr only) but lacks a higher level stdout printing solution for CLI applications. zprint fills this gap by providing:
std.debug.print
which only goes to stderrMIT License - see LICENSE file for details.