diff --git a/src/zlog.zig b/src/zlog.zig index 443eba4..aef6eab 100644 --- a/src/zlog.zig +++ b/src/zlog.zig @@ -1,6 +1,6 @@ const build_options = @import("build_options"); -const ztime = if (build_options.timestamp) @import("ztime") else null; const std = @import("std"); +const ztime = if (build_options.timestamp) @import("ztime") else null; pub const std_options: std.Options = .{ .logFn = logFn, @@ -19,13 +19,14 @@ fn logFn( const level_txt = comptime message_level.asText(); const prefix = if (scope == .default) ": " else "(" ++ @tagName(scope) ++ "): "; const fmt = level_txt ++ prefix ++ format ++ "\n"; - if (comptime build_options.file.len != 0) blk: { + if (comptime build_options.file.len != 0) { + // TODO: handle errors accordingly (i.e. panic?) // NOTE: with zig 0.13.0 there is currently no way to open files to append (except to use libc or talk directly to posix, which this lib should not have to do) const file = std.fs.openFileAbsolute(build_options.file, .{ .mode = .read_write, }) catch std.fs.createFileAbsolute(build_options.file, .{ .truncate = false, - }) catch break :blk; + }) catch @panic("Failed to open and/or create configured log file"); defer file.close(); var buffer = std.io.bufferedWriter(file.writer()); @@ -47,14 +48,14 @@ fn logFn( } } -fn log_writing(writer: anytype, comptime fmt: []const u8, args: anytype) void { +inline fn log_writing(writer: anytype, comptime fmt: []const u8, args: anytype) void { nosuspend { if (build_options.timestamp) log_timestamp(writer); writer.print(fmt, args) catch return; } } -fn log_timestamp(writer: anytype) void { +inline fn log_timestamp(writer: anytype) void { writer.print("[{any}] ", .{ztime.DateTime.now()}) catch return; } @@ -63,6 +64,7 @@ pub fn pretty_format(object: anytype, comptime fmt: []const u8, options: std.fmt } fn inner_format(object: anytype, comptime fmt: []const u8, options: std.fmt.FormatOptions, writer: anytype, comptime depth: u8) !void { + // TODO: here `std.meta` might be useful const Object = @TypeOf(object); const object_info = @typeInfo(Object); switch (object_info) {