From 1a14f588d78347860bac9d42e80375598bcf05cb Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Tue, 28 Dec 2021 22:17:19 +0200 Subject: Added logging support --- src/main.zig | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'src/main.zig') diff --git a/src/main.zig b/src/main.zig index 9c81776..89c72f0 100644 --- a/src/main.zig +++ b/src/main.zig @@ -2,14 +2,54 @@ const std = @import("std"); const Allocator = std.mem.Allocator; const Editor = @import("Editor.zig"); +const File = std.fs.File; const GPA = std.heap.GeneralPurposeAllocator(.{}); const RawMode = @import("RawMode.zig"); +var log_file: ?File = null; + +pub fn log( + comptime level: std.log.Level, + comptime scope: @TypeOf(.EnumLiteral), + comptime format: []const u8, + args: anytype, +) void { + const file = if (log_file) |f| f else std.io.getStdErr(); + + const writer = file.writer(); + + const prefix = switch (scope) { + .default => "[" ++ level.asText() ++ "] ", + else => "[" ++ @tagName(scope) ++ ":" ++ level.asText() ++ "] ", + }; + + nosuspend writer.print(prefix ++ format ++ "\n", args) catch return; +} + pub fn main() !void { var gpa = GPA{}; defer _ = gpa.deinit(); const allocator = gpa.allocator(); + const log_file_name = try std.fmt.allocPrint( + allocator, + "/tmp/es.{}.log", + .{std.os.linux.getpid()}, + ); + defer { + std.log.info("Logs in {s}", .{log_file_name}); + allocator.free(log_file_name); + } + + log_file = try std.fs.createFileAbsolute( + log_file_name, + .{ .exclusive = true, .truncate = true }, + ); + defer { + log_file.?.close(); + log_file = null; + } + const raw_mode = try RawMode.init(); defer raw_mode.deinit(); -- cgit v1.2.3