river: simplify log levels exposed to the user
This commit is contained in:
parent
8eaf7eb9cd
commit
c26d18647b
@ -31,10 +31,10 @@ utility may be used to communicate with river over these protocols.
|
|||||||
_shell_command_ will be run with _/bin/sh -c_. See the *CONFIGURATION*
|
_shell_command_ will be run with _/bin/sh -c_. See the *CONFIGURATION*
|
||||||
section for more details.
|
section for more details.
|
||||||
|
|
||||||
*-l* _log_level_
|
*-log-level* [*error*|*warn*|*info*|*debug*]
|
||||||
Set the log level of river to a value from 0 to 7 with 0 being the
|
Set the log level of river. At the *error* log level, only errors
|
||||||
least verbose and 7 being the most verbose. The default log level of
|
are logged. At the *debug* log level, everything is logged including
|
||||||
release-safe builds is 5.
|
verbose debug messages.
|
||||||
|
|
||||||
# CONFIGURATION
|
# CONFIGURATION
|
||||||
|
|
||||||
|
@ -28,25 +28,18 @@ const util = @import("util.zig");
|
|||||||
|
|
||||||
const Server = @import("Server.zig");
|
const Server = @import("Server.zig");
|
||||||
|
|
||||||
pub var server: Server = undefined;
|
|
||||||
|
|
||||||
pub var level: std.log.Level = switch (std.builtin.mode) {
|
|
||||||
.Debug => .debug,
|
|
||||||
.ReleaseSafe => .notice,
|
|
||||||
.ReleaseFast => .err,
|
|
||||||
.ReleaseSmall => .emerg,
|
|
||||||
};
|
|
||||||
|
|
||||||
const usage: []const u8 =
|
const usage: []const u8 =
|
||||||
\\usage: river [options]
|
\\usage: river [options]
|
||||||
\\
|
\\
|
||||||
\\ -help Print this help message and exit.
|
\\ -help Print this help message and exit.
|
||||||
\\ -c <command> Run `sh -c <command>` on startup.
|
|
||||||
\\ -l <level> Set the log level to a value from 0 to 7.
|
|
||||||
\\ -version Print the version number and exit.
|
\\ -version Print the version number and exit.
|
||||||
|
\\ -c <command> Run `sh -c <command>` on startup.
|
||||||
|
\\ -log-level <level> Set the log level to error, warning, info, or debug.
|
||||||
\\
|
\\
|
||||||
;
|
;
|
||||||
|
|
||||||
|
pub var server: Server = undefined;
|
||||||
|
|
||||||
pub fn main() anyerror!void {
|
pub fn main() anyerror!void {
|
||||||
// This line is here because of https://github.com/ziglang/zig/issues/7807
|
// This line is here because of https://github.com/ziglang/zig/issues/7807
|
||||||
const argv: [][*:0]const u8 = os.argv;
|
const argv: [][*:0]const u8 = os.argv;
|
||||||
@ -54,7 +47,7 @@ pub fn main() anyerror!void {
|
|||||||
.{ .name = "-help", .kind = .boolean },
|
.{ .name = "-help", .kind = .boolean },
|
||||||
.{ .name = "-version", .kind = .boolean },
|
.{ .name = "-version", .kind = .boolean },
|
||||||
.{ .name = "-c", .kind = .arg },
|
.{ .name = "-c", .kind = .arg },
|
||||||
.{ .name = "-l", .kind = .arg },
|
.{ .name = "-log-level", .kind = .arg },
|
||||||
}) catch {
|
}) catch {
|
||||||
try io.getStdErr().writeAll(usage);
|
try io.getStdErr().writeAll(usage);
|
||||||
os.exit(1);
|
os.exit(1);
|
||||||
@ -73,13 +66,18 @@ pub fn main() anyerror!void {
|
|||||||
try io.getStdOut().writeAll(build_options.version);
|
try io.getStdOut().writeAll(build_options.version);
|
||||||
os.exit(0);
|
os.exit(0);
|
||||||
}
|
}
|
||||||
if (result.argFlag("-l")) |level_str| {
|
if (result.argFlag("-log-level")) |level_str| {
|
||||||
const log_level = std.fmt.parseInt(u3, std.mem.span(level_str), 10) catch {
|
const level = std.meta.stringToEnum(LogLevel, std.mem.span(level_str)) orelse {
|
||||||
std.log.err("invalid log level '{s}'", .{level_str});
|
std.log.err("invalid log level '{s}'", .{level_str});
|
||||||
try io.getStdErr().writeAll(usage);
|
try io.getStdErr().writeAll(usage);
|
||||||
os.exit(1);
|
os.exit(1);
|
||||||
};
|
};
|
||||||
level = @intToEnum(std.log.Level, log_level);
|
runtime_log_level = switch (level) {
|
||||||
|
.@"error" => .err,
|
||||||
|
.warning => .warn,
|
||||||
|
.info => .info,
|
||||||
|
.debug => .debug,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
const startup_command = blk: {
|
const startup_command = blk: {
|
||||||
if (result.argFlag("-c")) |command| {
|
if (result.argFlag("-c")) |command| {
|
||||||
@ -89,7 +87,7 @@ pub fn main() anyerror!void {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
wlr.log.init(switch (level) {
|
wlr.log.init(switch (runtime_log_level) {
|
||||||
.debug => .debug,
|
.debug => .debug,
|
||||||
.notice, .info => .info,
|
.notice, .info => .info,
|
||||||
.warn, .err, .crit, .alert, .emerg => .err,
|
.warn, .err, .crit, .alert, .emerg => .err,
|
||||||
@ -146,3 +144,40 @@ fn defaultInitPath() !?[:0]const u8 {
|
|||||||
|
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Tell std.log to leave all log level filtering to us.
|
||||||
|
pub const log_level: std.log.Level = .debug;
|
||||||
|
|
||||||
|
/// Set the default log level based on the build mode.
|
||||||
|
var runtime_log_level: std.log.Level = switch (std.builtin.mode) {
|
||||||
|
.Debug => .debug,
|
||||||
|
.ReleaseSafe, .ReleaseFast, .ReleaseSmall => .info,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// River only exposes these 4 log levels to the user for simplicity
|
||||||
|
const LogLevel = enum {
|
||||||
|
@"error",
|
||||||
|
warning,
|
||||||
|
info,
|
||||||
|
debug,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub fn log(
|
||||||
|
comptime message_level: std.log.Level,
|
||||||
|
comptime scope: @TypeOf(.EnumLiteral),
|
||||||
|
comptime format: []const u8,
|
||||||
|
args: anytype,
|
||||||
|
) void {
|
||||||
|
if (@enumToInt(message_level) > @enumToInt(runtime_log_level)) return;
|
||||||
|
|
||||||
|
const river_level: LogLevel = switch (message_level) {
|
||||||
|
.emerg, .alert, .crit, .err => .@"error",
|
||||||
|
.warn => .warning,
|
||||||
|
.notice, .info => .info,
|
||||||
|
.debug => .debug,
|
||||||
|
};
|
||||||
|
const scope_prefix = if (scope == .default) ": " else "(" ++ @tagName(scope) ++ "): ";
|
||||||
|
|
||||||
|
const stderr = std.io.getStdErr().writer();
|
||||||
|
stderr.print(@tagName(river_level) ++ scope_prefix ++ format ++ "\n", args) catch {};
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user