Xenon/src/logger.zig

47 lines
1.2 KiB
Zig

const builtin = @import("builtin");
const std = @import("std");
const fb = @import("framebuffer.zig");
const global = @import("global.zig");
const lock = @import("lock.zig");
const types = @import("types.zig");
const enable_verbose = false;
pub const LogLevel = enum {
Verbose,
Debug,
Info,
Warning,
Error,
Writethrough,
};
var log_lock: lock.SpinLock = lock.SpinLock.init();
pub fn log(comptime loglevel: LogLevel, comptime fmt: []const u8, args: var) void {
if ((loglevel != .Debug or builtin.mode == .Debug) and
(loglevel != .Verbose or enable_verbose))
{
if (global.log_target) |logger| {
log_lock.acquire();
defer log_lock.release();
if (loglevel != .Writethrough)
logger.print("{}|", .{@tagName(loglevel)[0..1]}) catch unreachable;
logger.print(fmt, args) catch unreachable;
if (loglevel != .Writethrough)
logger.write("\r\n") catch unreachable;
}
}
}
pub var log_stream = std.io.OutStream(types.NoError){
.writeFn = logStreamWrite,
};
fn logStreamWrite(out_stream: *std.io.OutStream(types.NoError), string: []const u8) types.NoError!void {
log(.Writethrough, "{s}", .{string});
}