Filtering Example ​
Learn how to filter log messages based on level, module, or content.
Basic Filtering ​
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 colors on Windows
_ = logly.Terminal.enableAnsiColors();
const logger = try logly.Logger.init(allocator);
defer logger.deinit();
// Create a filter
var filter = logly.Filter.init(allocator);
defer filter.deinit();
// Add minimum level filter - only warning and above
try filter.addMinLevel(.warning);
// Apply filter to logger
logger.setFilter(&filter);
// Only warning and above will pass
try logger.debug("This won't appear", @src()); // Filtered out
try logger.info("This won't appear", @src()); // Filtered out
try logger.warn("This will appear", @src()); // Passes filter (short alias)
try logger.err("This will appear", @src()); // Passes filter
}Module-Based Filtering ​
zig
// Filter by module prefix
var filter = logly.Filter.init(allocator);
defer filter.deinit();
try filter.addModulePrefix("database"); // Only from "database" module
logger.setFilter(&filter);
// Create scoped logger
const db_logger = logger.scoped("database");
try db_logger.info("This will appear", @src()); // Module matches
try logger.info("This won't appear", @src()); // No module, filteredMessage Content Filtering ​
zig
var filter = logly.Filter.init(allocator);
defer filter.deinit();
// Deny logs containing sensitive keywords
try filter.addMessageFilter("password", .deny);
try filter.addMessageFilter("secret", .deny);
logger.setFilter(&filter);
try logger.info("Normal message", @src()); // Passes
try logger.info("User password changed", @src()); // Filtered (contains "password")Filter Presets ​
zig
const FilterPresets = logly.FilterPresets;
// Production: info and above (excludes trace/debug)
var prod_filter = try FilterPresets.production(allocator);
defer prod_filter.deinit();
// Errors only: err and above
var error_filter = try FilterPresets.errorsOnly(allocator);
defer error_filter.deinit();
// Module-specific filter
var db_filter = try FilterPresets.moduleOnly(allocator, "database");
defer db_filter.deinit();Filter Rule Types ​
| Rule Type | Method | Description |
|---|---|---|
| Min Level | addMinLevel(level) | Allow logs at or above level |
| Max Level | addMaxLevel(level) | Allow logs at or below level |
| Module Prefix | addModulePrefix(prefix) | Allow logs from matching modules |
| Message Contains | addMessageFilter(str, action) | Allow/deny based on content |
Filter Actions ​
.allow- Allow logs matching this rule.deny- Block logs matching this rule
Combined Filtering ​
zig
var filter = logly.Filter.init(allocator);
defer filter.deinit();
// Multiple rules: info level minimum, exclude password-related
try filter.addMinLevel(.info);
try filter.addMessageFilter("password", .deny);
logger.setFilter(&filter);Use Cases ​
- Development: No filter (show all logs)
- Production: Filter to warnings and above
- Debugging: Enable debug for specific modules only
- Security: Filter out PII-containing messages
New Methods (v0.0.9) ​
zig
var filter = logly.Filter.init(allocator);
defer filter.deinit();
// Add rules
try filter.addMinLevel(.warning);
try filter.addModulePrefix("database.", .allow);
try filter.addMessageFilter("password", .deny);
// Batch evaluation (more efficient for multiple records)
var results: [100]bool = undefined;
filter.shouldLogBatch(&records, &results);
// Fast path check
if (filter.allowsAll()) {
// No rules, skip evaluation
}
// Statistics
const allowed = filter.allowedCount();
const denied = filter.deniedCount();
const total = filter.totalProcessed();
filter.resetStats();
// State
const count = filter.count(); // Number of rules
const has = filter.hasRules();
const empty = filter.isEmpty();
// Disable filter
filter.disable();Aliases ​
| Alias | Method |
|---|---|
check | shouldLog |
evaluate | shouldLog |
minLevel | addMinLevel |
min | addMinLevel |
maxLevel | addMaxLevel |
max | addMaxLevel |
moduleFilter | addModulePrefix |
addPrefix | addModulePrefix |
messageFilter | addMessageFilter |
reset | clear |
removeAll | clear |
ruleCount | count |
length | count |
See Also ​
- Filtering Guide - Detailed filtering documentation
- Filter API - Full API reference
