fix(log): allow std.log calls outside of actor contexts
This commit is contained in:
parent
578b7bdbda
commit
3dc56ea6db
2 changed files with 11 additions and 2 deletions
11
src/log.zig
11
src/log.zig
|
@ -181,18 +181,25 @@ pub fn unsubscribe() tp.result {
|
||||||
return tp.env.get().proc("log").send(.{"unsubscribe"});
|
return tp.env.get().proc("log").send(.{"unsubscribe"});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var std_log_pid: ?tp.pid_ref = null;
|
||||||
|
|
||||||
|
pub fn set_std_log_pid(pid: ?tp.pid_ref) void {
|
||||||
|
std_log_pid = pid;
|
||||||
|
}
|
||||||
|
|
||||||
pub fn std_log_function(
|
pub fn std_log_function(
|
||||||
comptime level: std.log.Level,
|
comptime level: std.log.Level,
|
||||||
comptime scope: @TypeOf(.EnumLiteral),
|
comptime scope: @TypeOf(.EnumLiteral),
|
||||||
comptime format: []const u8,
|
comptime format: []const u8,
|
||||||
args: anytype,
|
args: anytype,
|
||||||
) void {
|
) void {
|
||||||
|
const log_pid = std_log_pid orelse return;
|
||||||
const prefix = "[" ++ comptime level.asText() ++ "] ";
|
const prefix = "[" ++ comptime level.asText() ++ "] ";
|
||||||
var buf: [max_log_message]u8 = undefined;
|
var buf: [max_log_message]u8 = undefined;
|
||||||
const output = std.fmt.bufPrint(&buf, prefix ++ format, args) catch "MESSAGE TOO LARGE";
|
const output = std.fmt.bufPrint(&buf, prefix ++ format, args) catch "MESSAGE TOO LARGE";
|
||||||
if (level == .err) {
|
if (level == .err) {
|
||||||
tp.env.get().proc("log").send(.{ "log", "error", @tagName(scope), "std.log", "->", output }) catch {};
|
log_pid.send(.{ "log", "error", @tagName(scope), "std.log", "->", output }) catch {};
|
||||||
} else {
|
} else {
|
||||||
tp.env.get().proc("log").send(.{ "log", @tagName(scope), output }) catch {};
|
log_pid.send(.{ "log", @tagName(scope), output }) catch {};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -133,6 +133,8 @@ pub fn main() anyerror!void {
|
||||||
|
|
||||||
const log_proc = try log.spawn(&ctx, a, &env);
|
const log_proc = try log.spawn(&ctx, a, &env);
|
||||||
defer log_proc.deinit();
|
defer log_proc.deinit();
|
||||||
|
log.set_std_log_pid(log_proc.ref());
|
||||||
|
defer log.set_std_log_pid(null);
|
||||||
|
|
||||||
env.set("restore-session", (res.args.@"restore-session" != 0));
|
env.set("restore-session", (res.args.@"restore-session" != 0));
|
||||||
env.set("no-alternate", (res.args.@"no-alternate" != 0));
|
env.set("no-alternate", (res.args.@"no-alternate" != 0));
|
||||||
|
|
Loading…
Add table
Reference in a new issue