Проблемы с путями при создании Bunyan Child Logger - PullRequest
0 голосов
/ 13 октября 2018

В этом простом приложении, где два разных файла foo.js и bar.js импортируют Logger.js для создания bunyan дочернего регистратора.

Проблема: foo.js работает безупречноно bar.js не может найти MyService.log, определенный в Logger.js.По-видимому, это связано с фиксированным относительным путем к MyService.log, тогда как foo.js и bar.js находятся на разных уровнях каталогов относительно корневого каталога проекта.

Что будет лучшим способом для созданияbunyan дочерний регистратор?

.
├── lib
|   └── Logger.js
├── foo
|   └── foo.js
├── bar.js

/ src / lib / Logger.js

const bunyan = require('bunyan')
const logger = bunyan.createLogger({
    name: 'MyService',
    streams: [
        {
            stream: process.stdout,
            level: "info"
        },
        {
            type: 'rotating-file',
            path: '../logs/MyService.log',
            period: '1w',
            count: 100,
            level: "debug"
        }
    ]
})

module.exports = {
    getChildLogger(componentName) {
        return logger.child({
            component: componentName
        })
    }
}

/ src / foo / foo.js

const log = require('../lib/Logger').getChildLogger('foo')
log.info('Foo')

/ src / bar.js

const log = require('./lib/Logger').getChildLogger('foo')
log.info('Bar')

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Я бы использовал resolve метод из path модуля.Выбранный ответ из на этот вопрос подчеркивает преимущество метода resolve:

Если вы не укажете путь, указывающий корневой каталог, то пути, указанные для разрешенияФункция добавляется к текущему рабочему каталогу.

Поэтому я бы указал путь как:

const { resolve } = require('path');

const log = resolve('logs', 'MyService.log');
0 голосов
/ 13 октября 2018

Вместо относительного пути, попробуйте использовать абсолютный путь к файлу, используя модуль пути (ядро).

const path = require('path');

const loggerPath = path.join(__dirname, '..', 'logs', 'MyService.log');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...