在这个简单的应用程序中,两个不同的文件foo.js和bar.js导入Logger.js来创建一个bunyan子记录器。
问题: foo.js工作得完美无缺,但是bar.js在找到Logger.js中定义的MyService.log时遇到了问题。这似乎是由于固定了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')发布于 2018-10-13 18:24:28
而不是相对路径,尝试使用使用路径模块(核心)的绝对文件路径。
const path = require('path');
const loggerPath = path.join(__dirname, '..', 'logs', 'MyService.log');发布于 2018-10-13 18:40:20
我将使用来自resolve模块的path方法。this question选择的答案突出了resolve方法的优势:
如果没有提供指定根目录的路径,那么给解析函数的路径就会附加到当前的工作目录中。
因此,我会将路径指定为:
const { resolve } = require('path');
const log = resolve('logs', 'MyService.log');https://stackoverflow.com/questions/52795640
复制相似问题