-
Notifications
You must be signed in to change notification settings - Fork 0
/
logger.js
127 lines (109 loc) · 3.83 KB
/
logger.js
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
var fs = require("fs"),
path = require("path"),
debugging = process.argv.slice(1).join(" ").indexOf("debug") > -1,
debug = (debugging ? console.log.bind(console) : ()=>{});
module.exports = (externalLogger, logFolder, moduleName = "unknownmodule")=> {
var uiWindow;
function validUiWindow() {
return uiWindow && !uiWindow.isDestroyed();
}
function padLeft(number) {
return (String(number).length === 1 ? "0" : "") + number;
}
function getLogDatetime() {
var d = new Date();
return [ d.getFullYear(),
padLeft(d.getMonth() + 1),
padLeft(d.getDate())].join("/") + " " +
[ padLeft(d.getHours()),
padLeft(d.getMinutes()),
padLeft(d.getSeconds())].join(":");
}
function fileExists(path) {
try {
fs.lstatSync(path);
return true;
}
catch(e) {
return false;
}
}
function resetLogFiles(maxSize=0) {
if (!logFolder) {return;}
try {
[`${moduleName}-events.log`,`${moduleName}-detail.log`]
.forEach((str)=>{
let filePath = path.join(logFolder, str);
if (fs.statSync(filePath).size < maxSize) {return;}
fs.truncate(filePath, err=>debug("could not truncate", filePath));
});
} catch(e) {debug(e.stack);}
}
function appendToLog(detail, userFriendlyMessage) {
// Do not log to files if logFolder is not defined
if(!logFolder) return;
try {
var eventsLog = path.join(logFolder, `${moduleName}-events.log`);
var detailsLog = path.join(logFolder, `${moduleName}-detail.log`);
// backwards compatible for installer and player modules
var detailsVal = (typeof detail === "string") ? detail : (detail && (detail.event_details || detail.eventDetails)) || "";
if(!fileExists(logFolder)) {
fs.mkdirSync(logFolder);
}
if(userFriendlyMessage) {
fs.appendFileSync(eventsLog, getLogDatetime() + " - " + userFriendlyMessage + "\n");
}
if(detailsVal) {
if(userFriendlyMessage) {
fs.appendFileSync(detailsLog, getLogDatetime() + " - " + userFriendlyMessage + "\n");
}
else {
fs.appendFileSync(detailsLog, getLogDatetime() + "\n");
}
if (typeof detailsVal === "object") { detailsVal = JSON.stringify(detailsVal); }
fs.appendFileSync(detailsLog, detailsVal + "\n");
}
}
catch (err) {
debug("Error writing to log file", err);
}
}
return {
debug,
error(detail, userFriendlyMessage, table) {
debug("ERROR: " + detail);
appendToLog(detail, userFriendlyMessage);
if (externalLogger) {externalLogger.log("error", detail, table, moduleName);}
if (validUiWindow()) {uiWindow.send("errorMessage", userFriendlyMessage || detail);}
},
warning(detail, table) {
debug("WARNING: " + detail);
appendToLog(detail);
if (externalLogger) {externalLogger.log("warning", detail, table, moduleName);}
},
all(evt, detail, pct, table) {
debug(evt, detail ? detail : "");
appendToLog(detail, evt);
if (validUiWindow() && !pct) {uiWindow.send("message", detail ? evt + ": " + detail : evt);}
if (validUiWindow() && pct) {uiWindow.send("set-progress", {msg: evt, pct});}
if (externalLogger) {externalLogger.log(evt, detail, table, moduleName);}
},
setUIWindow(win) {
uiWindow = win;
},
setDisplaySettings(settings) {
if (externalLogger) {externalLogger.setDisplaySettings(settings);}
},
external(evt, detail, table) {
appendToLog(detail, evt);
if (externalLogger) {externalLogger.log(evt, detail, table, moduleName);}
},
file(detail, userFriendlyMessage) {
appendToLog(detail, userFriendlyMessage);
},
progress(msg, pct) {
if (validUiWindow()) {uiWindow.send("set-progress", {msg, pct});}
},
resetLogFiles
};
};