knxultimate
Version:
KNX IP protocol implementation for Node. This is the ENGINE of Node-Red KNX-Ultimate node.
76 lines • 3.02 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.module = exports.setupLogger = exports.customTransports = exports.customKNXFormat = exports.setLogLevel = exports.logStream = void 0;
const winston_1 = __importDefault(require("winston"));
const stream_1 = require("stream");
const { format, transports, addColors } = winston_1.default;
const { combine, timestamp, label, printf, colorize, splat } = format;
const colorizer = colorize();
const MODULES = process.env.LOG_MODULES
? process.env.LOG_MODULES.split(',').map((m) => m.trim().toUpperCase())
: null;
exports.logStream = new stream_1.PassThrough({ objectMode: true });
function setLogLevel(level) {
logContainer.loggers.forEach((logger) => {
const transportsList = logger.transports;
transportsList.forEach((t) => {
t.level = level;
});
logger.configure({ level, transports: transportsList });
});
}
exports.setLogLevel = setLogLevel;
addColors({
time: 'grey',
module: 'bold',
});
function customKNXFormat(moduleName) {
return combine(splat(), timestamp({ format: 'YYYY-MM-DD HH:mm:ss.SSS' }), format((info) => {
info.level = info.level.toUpperCase();
return info;
})(), label({ label: moduleName.toUpperCase() }), colorize({ level: true }), printf((info) => {
info.timestamp = colorizer.colorize('time', info.timestamp);
info.label = colorizer.colorize('module', (info.label || '-'));
return `${info.timestamp} ${info.level} ${info.label}: ${info.message}${info.stack ? `\n${info.stack}` : ''}`;
}));
}
exports.customKNXFormat = customKNXFormat;
const logModules = (moduleName) => format((info) => !MODULES || MODULES.find((c) => moduleName.toUpperCase().startsWith(c))
? info
: false)();
function customTransports(moduleName) {
const formats = MODULES ? [logModules(moduleName)] : [];
formats.push(customKNXFormat(moduleName));
const transportsList = [
new transports.Console({
format: combine(...formats),
level: process.env.LOG_LEVEL || 'info',
stderrLevels: ['error'],
}),
new winston_1.default.transports.Stream({
stream: exports.logStream,
format: combine(...formats),
}),
];
return transportsList;
}
exports.customTransports = customTransports;
function setupLogger(container, moduleName) {
const logger = container.add(moduleName);
logger.configure({
transports: customTransports(moduleName),
});
logger.module = moduleName;
return logger;
}
exports.setupLogger = setupLogger;
const logContainer = new winston_1.default.Container();
function module(moduleName) {
return setupLogger(logContainer, moduleName);
}
exports.module = module;
exports.default = logContainer.loggers;
//# sourceMappingURL=KnxLog.js.map