Вопрос
Уинстон предоставляет winston.loggers.get("logger name"), чтобы получить регистратор. Как получить регистратор, созданный с использованием winston.createLogger(options) (у него нет имени)

Почему я спрашиваю
Я создал регистратор в файле с помощью winston.createLogger(options), а затем экспортирую созданный регистратор с помощью module.exports.

Я бы хотел использовать этот регистратор во всем своем приложении, но каждый раз, когда я require("") его, вызывается createLogger(options), таким образом каждый раз создавая новый регистратор.

Образец кода

const winston = require('winston');

// this logger does not have a name!
// Thus, how do I get it.
const logger = winston.createLogger({});


module.exports = logger;
0
Thiago P 2 Янв 2018 в 01:59

2 ответа

Лучший ответ

Формальный ответ для потомков:

Несколько вызовов require () в одном процессе node.js не будут создавать новые экземпляры модуля. Первый будет, затем последующие вызовы вернут ссылку на первый. Это сделано специально и очень удобно.

3
Jim B. 4 Янв 2018 в 17:56

Для тех, кто все еще хочет иметь возможность получить регистратор Winston по имени, когда он был создан с помощью createLogger(), я не нашел ответа.

Но вы можете сделать это и так.
Создайте регистратор с помощью winston.loggers.add(name, options)
Получить регистратор с помощью winston.loggers.get(name)

Кроме того, Node JS require() кеширует модули. КТО ЗНАЛ!

Спасибо за помощь.

1
Thiago P 4 Янв 2018 в 17:03