Added --debug-log flag for release mode binaries

This commit is contained in:
Alexandros Naskos 2020-11-08 13:40:16 +02:00
parent bf7f6cd5e9
commit 0d15ea754e
No known key found for this signature in database
GPG Key ID: 02BF2E72B0EA32D2

View File

@ -16,7 +16,11 @@ const semantic_tokens = @import("semantic_tokens.zig");
const logger = std.log.scoped(.main); const logger = std.log.scoped(.main);
pub const log_level: std.log.Level = switch (std.builtin.mode) { // Always set this to debug to make std.log call into our handler, then control the runtime
// value in the definition below.
pub const log_level = .debug;
var actual_log_level: std.log.Level = switch (std.builtin.mode) {
.Debug => .debug, .Debug => .debug,
else => .notice, else => .notice,
}; };
@ -27,6 +31,9 @@ pub fn log(
comptime format: []const u8, comptime format: []const u8,
args: anytype, args: anytype,
) void { ) void {
if (@enumToInt(message_level) > @enumToInt(actual_log_level)) {
return;
}
// After shutdown, pipe output to stderr // After shutdown, pipe output to stderr
if (!keep_running) { if (!keep_running) {
std.debug.print("[{}-{}] " ++ format, .{ @tagName(message_level), @tagName(scope) } ++ args); std.debug.print("[{}-{}] " ++ format, .{ @tagName(message_level), @tagName(scope) } ++ args);
@ -1580,6 +1587,24 @@ pub fn main() anyerror!void {
defer _ = gpa_state.deinit(); defer _ = gpa_state.deinit();
allocator = &gpa_state.allocator; allocator = &gpa_state.allocator;
// Check arguments.
var args_it = std.process.args();
const prog_name = try args_it.next(allocator) orelse unreachable;
allocator.free(prog_name);
while (args_it.next(allocator)) |maybe_arg| {
const arg = try maybe_arg;
defer allocator.free(arg);
if (std.mem.eql(u8, arg, "--debug-log")) {
actual_log_level = .debug;
std.debug.print("Enabled debug logging\n", .{});
} else {
std.debug.print("Unrecognized argument {}\n", .{arg});
std.os.exit(1);
}
}
args_it.deinit();
// Init global vars // Init global vars
const reader = std.io.getStdIn().reader(); const reader = std.io.getStdIn().reader();
stdout = std.io.bufferedOutStream(std.io.getStdOut().outStream()); stdout = std.io.bufferedOutStream(std.io.getStdOut().outStream());