aboutsummaryrefslogtreecommitdiff
path: root/src/Logger/index.cjs
blob: 2ee216a13af1418ba184c70e00b7285ab3b57119 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
let fse = require("fs-extra");

const level = {
    EMERG:   "EMERGENCY",
    ALERT:   "ALERT",
    CRIT:    "CRITICAL",
    ERROR:   "ERROR",
    WARNING: "WARNING",
    NOTICE:  "NOTICE",
    INFO:    "INFO",
    DEBUG:   "DEBUG",

    ACCESS:  ""
};


Object.defineProperty(String.prototype, "lPad", {
    value: function lPad(len, chr="0") {
        str = this;
        var i = -1;
        if (!chr && chr !== 0) chr = ' ';
        len = len - this.length;
        while (++i < len) {
          str = chr + str;
        }
        return str;
    },
    writeable: true,
    configurable: true
});


function getTimeStamp() {
    let CDate = new Date();
    let day = CDate.getDate().toString().lPad(2);
    let month = (CDate.getMonth() + 1).toString().lPad(2);  // +1 because js starts to count at 0
    let year = CDate.getFullYear();
    let hour = CDate.getHours().toString().lPad(2);
    let min = CDate.getMinutes().toString().lPad(2);
    let sec = CDate.getSeconds().toString().lPad(2);
    let ms = Math.round(CDate.getMilliseconds() / 10).toString().lPad(2);  // divide by 10 to make the last digit decimal, then round.

    return `${day}.${month}.${year}-${hour}:${min}:${sec}.${ms}`;
}


function log(object, logLevel=level.DEBUG, file="/lux-neo.log") {
    fse.ensureFileSync(__logdir + file);

    let formattedLogString = `[${getTimeStamp()}] ${logLevel} ${object}`;
    console.log(formattedLogString); // @TODO: This should probably be removed, used for dev currently
    

    fse.appendFile(
        __logdir + "/lux-neo.log",
        formattedLogString + '\n'
    ).catch(err => {
        console.log("EMERGENCY Could not write to log-file 'lux-neo.log'...");
        console.log("DEBUG FileWriteError: " + err)
    });

    if (__event != undefined) {
        __event.emit("logger", logLevel, object);
    }
}

module.exports = {
    level,
    log,
    emerg:   (object) => { log(object, level.EMERG);   },
    alert:   (object) => { log(object, level.ALERT);   },
    crit:    (object) => { log(object, level.CRIT);    },
    error:   (object) => { log(object, level.ERROR);   },
    warning: (object) => { log(object, level.WARNING); },
    notice:  (object) => { log(object, level.NOTICE);  },
    info:    (object) => { log(object, level.INFO);    },
    debug:   (object) => { log(object, level.DEBUG);   },
    access:  (object) => { log(object, level.ACCESS, file="/access.log"); }
};