67 lines
1.5 KiB
Haxe
67 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});
|
|
}
|
|
|
|
public static function warn(msg:Dynamic, ?pos:haxe.PosInfos) {
|
|
instance.log({level: Warn, message: Std.string(msg),time: 0});
|
|
}
|
|
|
|
public static function error(msg:Dynamic, ?pos:haxe.PosInfos) {
|
|
instance.log({level: Error, message: Std.string(msg),time: 0});
|
|
}
|
|
|
|
public static function debug(msg:Dynamic, ?pos:haxe.PosInfos) {
|
|
#if debug
|
|
instance.log({level: Debug, message: Std.string(msg),time: 0});
|
|
#end
|
|
}
|
|
|
|
public static function silly(msg:Dynamic, ?pos:haxe.PosInfos) {
|
|
instance.log({level: Silly, message: Std.string(msg),time: 0});
|
|
}
|
|
|
|
private function log(line: LogLine, ?pos:haxe.PosInfos) {
|
|
logLines.push(line);
|
|
|
|
if (logLines.length > MAX_LINES) {
|
|
logLines.shift();
|
|
}
|
|
|
|
#if webconsole
|
|
Debug.printWeb('[${Std.string(line.level)}] ${line.message}');
|
|
#end
|
|
|
|
onLogTrigger.trigger(line);
|
|
}
|
|
|
|
public function getLines():ReadOnlyArray<LogLine> {
|
|
return logLines;
|
|
}
|
|
}
|