diff --git a/README.md b/README.md index 3f8b7ec..88dd364 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,13 @@ ![](_logo/syslogzig-removebg.png) -# Zig syslog client +#
Zig syslog client
+ +
[![CI](https://github.com/g41797/syslog/actions/workflows/ci.yml/badge.svg)](https://github.com/g41797/syslog/actions/workflows/ci.yml)[![Wiki](https://img.shields.io/badge/Wikipedia-%23000000.svg?style=for-the-badge&logo=wikipedia&logoColor=white)](https://en.wikipedia.org/wiki/Syslog) +
+ This is a [syslog](https://en.wikipedia.org/wiki/Syslog) client library for Zig: @@ -130,7 +134,76 @@ Import *syslog*: const syslog = @import("syslog"); ``` +## Usage + +### Configuration + +syslog uses following configuration: +```zig +pub const SyslogOpts = struct { + // application: + name: []const u8 = "zigprocess", + fcl: rfc5424.Facility = .local7, + + // transport: + proto: Protocol = .udp, + addr: []const u8 = "127.0.0.1", + port: u16 = 514, +}; +``` + +### Initialization + +```zig + var logger: syslog.Syslog = .{}; + try logger.init(std.testing.allocator, .{ + .name = "runner", + .fcl = .daemon + .port = 12345, + }); + defer logger.deinit(); +``` + +After initialization you can call syslog on different threads. + +### Logging +There are two groups of APIs: +- write: message is straight text +```zig + pub inline fn write_(slog: *Syslog, msg: []const u8) !void {...} + .... + logger.write_debug("Hello, Zig!"); +``` +- print: message will be formatted before send +```zig + pub inline fn print_(slog: *Syslog, comptime fmt: []const u8, msg: anytype) !void {...} + .... + const name = "World"; + logger.print_debug("Hello, {s}!", .{name}); +``` + +### Filtering + +Set filter: +```zig + // disable send messages with .info & .debug severities + logger.setfilter(.info);// disable send messages with .info & .debug severities +``` + +Reset filter: +```zig + logger.setfilter(null); +``` + +## License +[MIT](LICENSE) -Powered by [![clion](_logo/CLion_icon.png)][refclion] + +
+
+ +*Powered by* [![clion](_logo/CLion_icon.png)][refclion] [refclion]: https://www.jetbrains.com/clion/ + +
\ No newline at end of file diff --git a/_notes.txt b/_notes.txt index bdd908a..2fb2f31 100644 --- a/_notes.txt +++ b/_notes.txt @@ -390,5 +390,6 @@ Import zig fetch --save=network git+https://github.com/ikskuh/zig-network - +Github MD + https://gist.github.com/nikhilnayyar002/7a35e653d3d590e317c829243e73b110 diff --git a/src/syslog.zig b/src/syslog.zig index c9a1228..78d88d8 100644 --- a/src/syslog.zig +++ b/src/syslog.zig @@ -33,7 +33,7 @@ pub const Syslog = struct { frmtr: Formatter = undefined, sndr: Sender = undefined, ready: bool = false, - filter: Severity = .debug, + filter: ?Severity = null, pub fn init(slog: *Syslog, allocator: Allocator, conf: SyslogOpts) !void { slog.mutex.lock(); @@ -121,10 +121,11 @@ pub const Syslog = struct { return error.NotReady; } - if (@intFromEnum(svr) > @intFromEnum(slog.filter)) { - return; + if(slog.filter != null){ + if (@intFromEnum(svr) >= @intFromEnum(slog.filter.?)) { + return; + } } - _ = try slog.*.sndr.send(try slog.*.frmtr.build(svr, msg)); errdefer slog.ready = false; @@ -140,8 +141,10 @@ pub const Syslog = struct { return error.NotReady; } - if (@intFromEnum(svr) > @intFromEnum(slog.filter)) { - return; + if(slog.filter != null){ + if (@intFromEnum(svr) >= @intFromEnum(slog.filter.?)) { + return; + } } _ = try slog.*.sndr.send(try slog.*.frmtr.format(svr, fmt, msg)); @@ -151,7 +154,7 @@ pub const Syslog = struct { return; } - pub fn setfilter(slog: *Syslog, svr: Severity) void { + pub fn setfilter(slog: *Syslog, svr: ?Severity) void { slog.mutex.lock(); defer slog.mutex.unlock(); diff --git a/src/syslog_tests.zig b/src/syslog_tests.zig index 0c98e57..88b929b 100644 --- a/src/syslog_tests.zig +++ b/src/syslog_tests.zig @@ -170,6 +170,8 @@ fn hellozig() !void { }); defer logger.deinit(); + logger.setfilter(.debug); + // Send syslog message try logger.write_info("Hello, Zig!");