2023-03-28 00:52:21 +02:00

68 lines
1.5 KiB
Haxe

package kernel.log;
import haxe.ds.ReadOnlyArray;
#if webconsole
import lib.Debug;
#end
using tink.CoreApi;
/**
Central logging system.
**/
class Log {
public static var instance:Log;
private static inline final MAX_LINES:Int = 100;
public final onLog:Signal<LogLine>;
private final onLogTrigger:SignalTrigger<LogLine> = new SignalTrigger();
private final logLines:Array<LogLine> = [];
public function new() {
onLog = onLogTrigger.asSignal();
}
public static function info(msg:Dynamic, ?pos:haxe.PosInfos) {
instance.log({level: Info, message: Std.string(msg),time: 0},pos);
}
public static function warn(msg:Dynamic, ?pos:haxe.PosInfos) {
instance.log({level: Warn, message: Std.string(msg),time: 0},pos);
}
public static function error(msg:Dynamic, ?pos:haxe.PosInfos) {
instance.log({level: Error, message: Std.string(msg),time: 0},pos);
}
public static function debug(msg:Dynamic, ?pos:haxe.PosInfos) {
#if debug
instance.log({level: Debug, message: Std.string(msg),time: 0},pos);
#end
}
public static function silly(msg:Dynamic, ?pos:haxe.PosInfos) {
instance.log({level: Silly, message: Std.string(msg),time: 0},pos);
}
private function log(line: LogLine, ?pos:haxe.PosInfos) {
line.origin = pos.className;
logLines.push(line);
if (logLines.length > MAX_LINES) {
logLines.shift();
}
#if webconsole
Debug.printWeb('[${Std.string(line.level)}][${line.origin}] ${line.message}');
#end
onLogTrigger.trigger(line);
}
public function getLines():ReadOnlyArray<LogLine> {
return logLines;
}
}