创建 bunyan 儿童记录器时的路径问题



在这个简单的应用程序中,foo.js两个不同的文件,bar.js导入Logger.js以创建一个bunyan子记录器。

问题:foo.js完美运行,但bar.js查找MyService.logLogger.js中定义时存在问题。这似乎是由于MyService.log的相对路径被修复,而foo.jsbar.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')

尝试使用路径模块(核心(使用绝对文件路径,而不是相对路径。

const path = require('path');
const loggerPath = path.join(__dirname, '..', 'logs', 'MyService.log');

我会使用path模块中的resolve方法。从这个问题中选择的答案突出了resolve方法的优势:

如果未提供指定根目录的路径,则 为解析函数提供的路径将附加到当前 工作目录。

所以我将路径指定为:

const { resolve } = require('path');
const log = resolve('logs', 'MyService.log');

最新更新