Чтобы помочь в моем протоколировании, я создал функцию удобства, которая создает winston.Logger
и устанавливает ее с правильными транспортерами и возвращает этот регистратор.В конструкторе установите построенный объект на другой.
Все работает нормально, но ESLint жалуется, что я вызываю то, что он видит в качестве конструктора, не используя new
.
Хотя я мог просто игнорировать предупреждение, мне нравятся строгие правила, и видение const logger = Logger('foo')
действительно запутывает.
Переименование Logger
чему-то вроде getLogger
кажется уродливым для меня, но ESLint не жалуется.
Что я должен был сделать Logger
конструктор, который непосредственно указывает на результат new winston.Logger
.
Очевидно, что this = new winston.Logger
не работал, но я уверен, что есть чистый способ сделать это.
Текущий фрагмент log.js
:
module.exports = (file) => {
let transports = getTransports(file),
logger = new (winston.Logger)({
rewriters: [
(level, msg, meta) => {
meta.app = file + '.js';
return meta;
}
],
transports: transports
});
return logger;
// this = logger;
};
Использование:
'use strict';
const Logger = require('./log.js'),
logger = Logger('foo');
logger.debug('foo');
Спасибо, это также ограничивает модификации я должен делать в кодовую. :) Что касается стиля, я увижу, что моя команда должна сказать об этом в обзоре кода, но так как это не хаки, и им тоже не нравится импортировать уникальную функцию с 'require', это решение идеально. – DrakaSAN