Advanced Configuration ​
This example demonstrates how to leverage advanced configuration options including custom log formats, timestamps, timezone settings, colors, and enterprise features.
Centralized Configuration Types ​
Logly now provides centralized configuration for all modules:
zig
const logly = @import("logly");
// Access all config types from logly namespace
const ThreadPoolConfig = logly.ThreadPoolConfig;
const SchedulerConfig = logly.SchedulerConfig;
const CompressionConfig = logly.CompressionConfig;
const AsyncConfig = logly.AsyncConfig;
// Build comprehensive config using helper methods
var config = logly.Config.default()
.withThreadPool(.{ .worker_count = 4 })
.withScheduler(.{ .max_tasks = 256 })
.withCompression(.{ .level = 6 })
.withAsync(.{ .buffer_size = 4096 });Code Example ​
zig
const std = @import("std");
const logly = @import("logly");
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const allocator = gpa.allocator();
// Enable ANSI colors on Windows
_ = logly.Terminal.enableAnsiColors();
// Initialize logger
const logger = try logly.Logger.init(allocator);
defer logger.deinit();
// ============================================
// SECTION 1: Custom Log Format
// ============================================
var config = logly.Config.default();
// Available placeholders:
// {time}, {level}, {message}, {module}, {function}, {file}, {line}, {trace_id}, {span_id}
config.log_format = "{time} | {level} | {message}";
config.time_format = "YYYY-MM-DD HH:mm:ss";
config.timezone = .utc;
logger.configure(config);
try logger.info("Custom format with pipe separators", @src());
try logger.warn("Notice the UTC timestamp", @src()); // Short alias for warning
// ============================================
// SECTION 2: Unix Timestamp Format
// ============================================
config.time_format = "unix";
logger.configure(config);
try logger.info("Now using Unix timestamp", @src());
// ============================================
// SECTION 3: Clickable File Links
// ============================================
config.time_format = "YYYY-MM-DD HH:mm:ss";
config.show_filename = true;
config.show_lineno = true;
config.log_format = null; // Use default format to show file:line
logger.configure(config);
try logger.debug("This shows file:line for VS Code clickable links", @src());
// ============================================
// SECTION 4: Color Configuration
// ============================================
// Global color control
config.global_color_display = true; // Master switch for all colors
config.color = true; // Enable ANSI color codes
logger.configure(config);
try logger.info("Colors enabled globally", @src());
try logger.success("Green success message", @src());
try logger.err("Red error message", @src());
// Disable colors
config.global_color_display = false;
logger.configure(config);
try logger.info("Colors now disabled", @src());
// Re-enable for remaining examples
config.global_color_display = true;
logger.configure(config);
// ============================================
// SECTION 5: Custom Levels with Colors
// ============================================
// Define custom levels with ANSI color codes
try logger.addCustomLevel("AUDIT", 35, "35"); // Magenta (priority 35)
try logger.addCustomLevel("NOTICE", 22, "36;1"); // Bold Cyan (priority 22)
try logger.addCustomLevel("ALERT", 48, "31;1"); // Bold Red (priority 48)
try logger.addCustomLevel("SECURITY", 55, "91;4"); // Underline Bright Red
try logger.custom("AUDIT", "User login event", @src());
try logger.custom("NOTICE", "System maintenance scheduled", @src());
try logger.custom("ALERT", "High memory usage detected", @src());
try logger.customf("SECURITY", "Failed login from IP: {s}", .{"192.168.1.100"}, @src());
// ============================================
// SECTION 6: JSON Configuration
// ============================================
config.json = true;
config.pretty_json = true;
config.global_color_display = false; // Colors don't apply to JSON structure
logger.configure(config);
try logger.info("JSON formatted output", @src());
try logger.custom("AUDIT", "JSON with custom level name", @src());
// ============================================
// SECTION 7: Multiple Sinks with Different Settings
// ============================================
// Reset to text format
config.json = false;
config.global_color_display = true;
config.auto_sink = false; // Disable default console sink
logger.configure(config);
// Console sink with colors (using add() alias)
_ = try logger.add(.{
.color = true,
});
// File sink without colors
_ = try logger.add(.{
.path = "logs/app.log",
.color = false,
});
// JSON file sink
_ = try logger.add(.{
.path = "logs/app.json",
.json = true,
.pretty_json = false,
.color = false,
});
// Error-only file sink
_ = try logger.add(.{
.path = "logs/errors.log",
.level = .err,
.color = false,
});
try logger.info("This goes to console (colored) and app.log (no color)", @src());
try logger.err("This goes to all sinks including errors.log", @src());
try logger.flush();
std.debug.print("\nAdvanced configuration example completed!\n", .{});
}Custom Log Format Placeholders ​
| Placeholder | Description | Example Output |
|---|---|---|
{time} | Timestamp | 2024-01-15 10:30:45.000 |
{level} | Log level | INFO, WARNING, AUDIT |
{message} | Log message | Application started |
{module} | Module name | database, http |
{function} | Function name | handleRequest |
{file} | Source filename | src/main.zig |
{line} | Line number | 42 |
{trace_id} | Distributed trace ID | trace-abc-123 |
{span_id} | Span ID | span-xyz-789 |
Format Examples ​
zig
// Pipe-separated format
config.log_format = "{time} | {level} | {message}";
// Output: 2024-01-15 10:30:45 | INFO | Hello
// Compact format
config.log_format = "[{level}] {message}";
// Output: [INFO] Hello
// With source location
config.log_format = "{time} [{level}] {file}:{line} - {message}";
// Output: 2024-01-15 10:30:45 [INFO] src/main.zig:42 - Hello
// With tracing
config.log_format = "[{trace_id}:{span_id}] {level}: {message}";
// Output: [trace-abc:span-123] INFO: HelloColor Code Reference ​
| Color | Code | Bright | Modifier |
|---|---|---|---|
| Black | 30 | 90 | Bold: ;1 |
| Red | 31 | 91 | Underline: ;4 |
| Green | 32 | 92 | Reverse: ;7 |
| Yellow | 33 | 93 | |
| Blue | 34 | 94 | |
| Magenta | 35 | 95 | |
| Cyan | 36 | 96 | |
| White | 37 | 97 |
Expected Output ​
text
2024-01-15 10:30:45 | INFO | Custom format with pipe separators
2024-01-15 10:30:45 | WARNING | Notice the UTC timestamp
1705315845000 | INFO | Now using Unix timestamp
[2024-01-15 10:30:45] [DEBUG] [src/main.zig:42] This shows file:line...
[2024-01-15 10:30:45] [INFO] Colors enabled globally
[2024-01-15 10:30:45] [SUCCESS] Green success message
[2024-01-15 10:30:45] [ERROR] Red error message
[2024-01-15 10:30:45] [INFO] Colors now disabled
[2024-01-15 10:30:45] [AUDIT] User login event
[2024-01-15 10:30:45] [NOTICE] System maintenance scheduled
{
"timestamp": "2024-01-15 10:30:45.000",
"level": "INFO",
"message": "JSON formatted output"
}
{
"timestamp": "2024-01-15 10:30:45.000",
"level": "AUDIT",
"message": "JSON with custom level name"
}