1 module unecht.core.logger;
2
3 import unecht.core.staticRingBuffer;
4
5 static if(__VERSION__ >= 2067)
6 {
7 public import std.experimental.logger:Logger;
8
9 Logger log;
10 HistoryLogger logHistory;
11
12 ///
13 final class HistoryLogger : Logger
14 {
15 import std.experimental.logger;
16
17 StaticRingBuffer!(100, LogEntry) history;
18
19 this() @safe
20 {
21 super(LogLevel.all);
22 }
23
24 override void writeLogMsg(ref LogEntry payload)
25 {
26 history ~= payload;
27 }
28 }
29
30 shared static this()
31 {
32 import std.stdio:stdout;
33 import std.experimental.logger:MultiLogger,FileLogger,sharedLog;
34
35 logHistory = new HistoryLogger();
36
37 auto logger = new MultiLogger();
38 logger.insertLogger("stdout", new FileLogger(stdout));
39 logger.insertLogger("unechtlog", new FileLogger("unecht.log"));
40 logger.insertLogger("history", logHistory);
41 log = logger;
42
43 sharedLog = log;
44 }
45 }
46 else
47 {
48 struct Logger
49 {
50 void info(string str)
51 {
52 import std.stdio;
53 writeln(str);
54 }
55
56 void infof(ARGS...)(string str, ARGS args)
57 {
58 import std.stdio;
59 writefln(str,args);
60 }
61
62 alias error = info;
63 alias errorf = infof;
64 alias warning = info;
65 alias warningf = infof;
66 }
67
68 Logger log;
69 }