From 2dd2f7ae74b25e5ea3ac31f85cdeae898bbb3eaf Mon Sep 17 00:00:00 2001 From: Bob Farrell Date: Tue, 12 Nov 2024 22:20:13 +0000 Subject: [PATCH] Add null logger Silence logs completely when `null` logger is active. Add pool size/timeout environment variable configuration for JetQuery. --- build.zig.zon | 4 ++-- src/commands/auth.zig | 2 ++ src/jetzig/Environment.zig | 5 ++++- src/jetzig/database.zig | 12 +++++++----- src/jetzig/loggers.zig | 4 +++- src/jetzig/loggers/NullLogger.zig | 25 +++++++++++++++++++++++++ 6 files changed, 43 insertions(+), 9 deletions(-) create mode 100644 src/jetzig/loggers/NullLogger.zig diff --git a/build.zig.zon b/build.zig.zon index 7c45e8f..2fb0faf 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -15,8 +15,8 @@ .hash = "12201d75d73aad5e1c996de4d5ae87a00e58479c8d469bc2eeb5fdeeac8857bc09af", }, .jetquery = .{ - .url = "https://github.com/jetzig-framework/jetquery/archive/23c9741a407b6c4f93d9d21508f6568be747bdcc.tar.gz", - .hash = "122020374e5fd67d5836c0f3d7a8f814262aa076e3b90c1043f44184da1c2997e0bb", + .url = "https://github.com/jetzig-framework/jetquery/archive/f3d0a02943afb058a968df320032bce7d236ae36.tar.gz", + .hash = "12209b52e5a5877008f0aedba23ce1ff778ba8e21a2a4de33182de2d31524b351c88", }, .jetcommon = .{ .url = "https://github.com/jetzig-framework/jetcommon/archive/a248776ba56d6cc2b160d593ac3305756adcd26e.tar.gz", diff --git a/src/commands/auth.zig b/src/commands/auth.zig index 3199266..11cb4f9 100644 --- a/src/commands/auth.zig +++ b/src/commands/auth.zig @@ -36,6 +36,8 @@ pub fn main() !void { std.enums.nameCast(jetzig.jetquery.Environment, jetzig.environment), .{ .env = try jetzig.database.repoEnv(env), .context = .cli }, ); + defer repo.deinit(); + const model = comptime jetzig.config.get(jetzig.auth.AuthOptions, "auth").user_model; const stdin = std.io.getStdIn(); const reader = stdin.reader(); diff --git a/src/jetzig/Environment.zig b/src/jetzig/Environment.zig index d73ef51..834f399 100644 --- a/src/jetzig/Environment.zig +++ b/src/jetzig/Environment.zig @@ -133,7 +133,7 @@ const Options = struct { \\Minimum log level. Log events below the given level are ignored. Must be one of: { TRACE, DEBUG, INFO, WARN, ERROR, FATAL } (default: DEBUG in development, INFO in production) , .@"log-format" = - \\Output logs in the given format. Must be one of: { development, json } (default: development) + \\Output logs in the given format. Must be one of: { development, production, json, null } (default: development) , .detach = \\Run the server in the background. Must be used in conjunction with --log (default: false) @@ -231,6 +231,9 @@ pub fn init(parent_allocator: std.mem.Allocator, env_options: EnvironmentOptions log_queue, ), }, + .null => jetzig.loggers.Logger{ + .null_logger = jetzig.loggers.NullLogger{}, + }, }; if (options.options.detach and std.mem.eql(u8, options.options.log, "-")) { diff --git a/src/jetzig/database.zig b/src/jetzig/database.zig index bdd057e..2d03d81 100644 --- a/src/jetzig/database.zig +++ b/src/jetzig/database.zig @@ -49,11 +49,13 @@ pub fn repoEnv(env: jetzig.Environment) !Repo.AdapterOptions { return switch (comptime adapter) { .null => .{}, .postgresql => .{ - .hostname = @as(?[]const u8, env.vars.get("JETQUERY_HOSTNAME")), - .port = @as(?u16, try env.vars.getT(u16, "JETQUERY_PORT")), - .username = @as(?[]const u8, env.vars.get("JETQUERY_USERNAME")), - .password = @as(?[]const u8, env.vars.get("JETQUERY_PASSWORD")), - .database = @as(?[]const u8, env.vars.get("JETQUERY_DATABASE")), + .hostname = env.vars.get("JETQUERY_HOSTNAME"), + .port = try env.vars.getT(u16, "JETQUERY_PORT"), + .username = env.vars.get("JETQUERY_USERNAME"), + .password = env.vars.get("JETQUERY_PASSWORD"), + .database = env.vars.get("JETQUERY_DATABASE"), + .pool_size = try env.vars.getT(u16, "JETQUERY_POOL_SIZE"), + .timeout = try env.vars.getT(u32, "JETQUERY_TIMEOUT"), }, }; } diff --git a/src/jetzig/loggers.zig b/src/jetzig/loggers.zig index 184d2ab..91a73a5 100644 --- a/src/jetzig/loggers.zig +++ b/src/jetzig/loggers.zig @@ -8,11 +8,12 @@ pub const DevelopmentLogger = @import("loggers/DevelopmentLogger.zig"); pub const JsonLogger = @import("loggers/JsonLogger.zig"); pub const TestLogger = @import("loggers/TestLogger.zig"); pub const ProductionLogger = @import("loggers/ProductionLogger.zig"); +pub const NullLogger = @import("loggers/NullLogger.zig"); pub const LogQueue = @import("loggers/LogQueue.zig"); pub const LogLevel = enum(u4) { TRACE, DEBUG, INFO, WARN, ERROR, FATAL }; -pub const LogFormat = enum { development, production, json }; +pub const LogFormat = enum { development, production, json, null }; /// Infer a log target (stdout or stderr) from a given log level. pub inline fn logTarget(comptime level: LogLevel) LogQueue.Target { @@ -26,6 +27,7 @@ pub const Logger = union(enum) { json_logger: JsonLogger, test_logger: TestLogger, production_logger: ProductionLogger, + null_logger: NullLogger, /// Log a TRACE level message to the configured logger. pub fn TRACE(self: *const Logger, comptime message: []const u8, args: anytype) !void { diff --git a/src/jetzig/loggers/NullLogger.zig b/src/jetzig/loggers/NullLogger.zig new file mode 100644 index 0000000..7852b23 --- /dev/null +++ b/src/jetzig/loggers/NullLogger.zig @@ -0,0 +1,25 @@ +const std = @import("std"); + +const jetzig = @import("../../jetzig.zig"); + +pub inline fn log(self: @This(), comptime level: jetzig.loggers.LogLevel, comptime message: []const u8, args: anytype) !void { + _ = self; + _ = level; + _ = message; + _ = args; +} + +pub inline fn logSql(self: @This(), event: jetzig.jetquery.events.Event) !void { + _ = self; + _ = event; +} + +pub inline fn logRequest(self: @This(), request: *const jetzig.http.Request) !void { + _ = self; + _ = request; +} + +pub inline fn logError(self: @This(), err: anyerror) !void { + _ = self; + std.debug.print("Error: {s}\n", .{@errorName(err)}); +}