Javascript 创建bunyan子记录器时出现路径问题
在这个简单的应用程序中,两个不同的文件Javascript 创建bunyan子记录器时出现路径问题,javascript,node.js,logging,npm,bunyan,Javascript,Node.js,Logging,Npm,Bunyan,在这个简单的应用程序中,两个不同的文件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 ├──
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
})
}
}
const log = require('../lib/Logger').getChildLogger('foo')
log.info('Foo')
const log = require('./lib/Logger').getChildLogger('foo')
log.info('Bar')
/src/foo/foo.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
})
}
}
const log = require('../lib/Logger').getChildLogger('foo')
log.info('Foo')
const log = require('./lib/Logger').getChildLogger('foo')
log.info('Bar')
/src/bar.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
})
}
}
const log = require('../lib/Logger').getChildLogger('foo')
log.info('Foo')
const log = require('./lib/Logger').getChildLogger('foo')
log.info('Bar')
尝试使用路径模块(核心)使用绝对文件路径,而不是相对路径
尝试使用路径模块(核心)使用绝对文件路径,而不是相对路径
我将使用
path
模块中的resolve
方法。从中选择的答案突出了resolve
方法的优点:
如果未提供指定根目录的路径,则
给定给resolve函数的路径将附加到当前
工作目录
因此,我将指定路径为:
const { resolve } = require('path');
const log = resolve('logs', 'MyService.log');
我将使用
path
模块中的resolve
方法。从中选择的答案突出了resolve
方法的优点:
如果未提供指定根目录的路径,则
给定给resolve函数的路径将附加到当前
工作目录
因此,我将指定路径为:
const { resolve } = require('path');
const log = resolve('logs', 'MyService.log');