47 lines
1.2 KiB
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});
|
|
}
|