2021-01-21 21:31:37 +01:00
|
|
|
const winston = require("winston");
|
|
|
|
|
const { colorize, combine, label, printf, timestamp } = winston.format;
|
|
|
|
|
|
2021-01-21 23:40:59 +01:00
|
|
|
const Configuration = require("./Configuration");
|
|
|
|
|
|
|
|
|
|
const LEVELS = ["error", "warn", "info", "debug", "verbose", "silly"];
|
|
|
|
|
|
2021-01-21 21:31:37 +01:00
|
|
|
const logFormat = printf(info => {
|
|
|
|
|
if(info.stack) {
|
|
|
|
|
return `${info.timestamp} ${info.level} [${info.label}] ${info.message}\n${info.stack}`;
|
|
|
|
|
}
|
|
|
|
|
return `${info.timestamp} ${info.level} [${info.label}] ${info.message}`;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
/** Winston-based logger */
|
|
|
|
|
class Logger {
|
|
|
|
|
constructor () {
|
|
|
|
|
throw new Error("Please call createLogger instead");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** Created logger will follow Winston createLogger, but
|
|
|
|
|
* - add module name to logger
|
|
|
|
|
* - swap debug/verbose levels and omit http to mimic HA standard
|
|
|
|
|
* Levels (in order): error, warn, info, debug, verbose, silly
|
|
|
|
|
* */
|
2021-01-21 23:40:59 +01:00
|
|
|
static getLogger(moduleName) {
|
|
|
|
|
const config = Configuration.getConfiguration();
|
|
|
|
|
const level = (config.logLevel && LEVELS.find(l => l.startsWith(config.logLevel[0].toLowerCase()))) || "info";
|
|
|
|
|
|
2021-01-21 21:31:37 +01:00
|
|
|
const logger = winston.createLogger({
|
|
|
|
|
format: combine(
|
|
|
|
|
winston.format(info => {
|
|
|
|
|
switch (info.level) {
|
2021-01-21 23:40:59 +01:00
|
|
|
case "warning":
|
|
|
|
|
info.level = "WRN";
|
|
|
|
|
break;
|
2021-01-21 21:31:37 +01:00
|
|
|
case "verbose":
|
|
|
|
|
info.level = "VRB";
|
|
|
|
|
break;
|
|
|
|
|
case "debug":
|
|
|
|
|
info.level = "DBG";
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
info.level = info.level.substring(0,3).toUpperCase()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return info;
|
|
|
|
|
})(),
|
|
|
|
|
timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
|
|
|
|
|
label({ label: moduleName}),
|
|
|
|
|
colorize(),
|
|
|
|
|
logFormat,
|
|
|
|
|
),
|
|
|
|
|
level: level,
|
|
|
|
|
levels: Logger.logLevels().levels,
|
|
|
|
|
transports: [
|
|
|
|
|
new winston.transports.Console(),
|
|
|
|
|
]
|
|
|
|
|
});
|
|
|
|
|
winston.addColors(Logger.logLevels().colors);
|
2021-01-21 23:40:59 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
if (moduleName === "plejd-main") {
|
|
|
|
|
logger.log(level, `Log level set to ${level}`);
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-21 21:31:37 +01:00
|
|
|
return logger;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static logLevels() {
|
|
|
|
|
// Default (npm) levels
|
|
|
|
|
// levels = {
|
|
|
|
|
// error: 0,
|
|
|
|
|
// warn: 1,
|
|
|
|
|
// info: 2,
|
|
|
|
|
// http: 3,
|
|
|
|
|
// verbose: 4,
|
|
|
|
|
// debug: 5,
|
|
|
|
|
// silly: 6
|
|
|
|
|
// }
|
|
|
|
|
// colors = {
|
|
|
|
|
// error: 'red',
|
|
|
|
|
// warn: 'yellow',
|
|
|
|
|
// info: 'green',
|
|
|
|
|
// http: 'green',
|
|
|
|
|
// verbose: 'cyan',
|
|
|
|
|
// debug: 'blue',
|
|
|
|
|
// silly: 'magenta'
|
|
|
|
|
// };
|
|
|
|
|
|
|
|
|
|
// Mimic HA standard below
|
|
|
|
|
// Debug/verbose swapped compared to npm levels, http omitted
|
|
|
|
|
return {
|
|
|
|
|
levels: {
|
|
|
|
|
error: 0,
|
|
|
|
|
warn: 1,
|
|
|
|
|
info: 2,
|
|
|
|
|
debug: 3,
|
|
|
|
|
verbose: 4,
|
|
|
|
|
silly: 6
|
|
|
|
|
},
|
|
|
|
|
colors: {
|
|
|
|
|
error: 'red',
|
|
|
|
|
warn: 'yellow',
|
|
|
|
|
info: 'green',
|
|
|
|
|
debug: 'cyan',
|
|
|
|
|
verbose: 'blue',
|
|
|
|
|
silly: 'magenta'
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports = Logger;
|