创建 bunyan 子记录器时的路径问题
Path Problems when Creating bunyan Child Logger
在这个简单的应用程序中,两个不同的文件 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')
尝试使用路径模块(核心)使用绝对文件路径,而不是相对路径。
const path = require('path');
const loggerPath = path.join(__dirname, '..', 'logs', 'MyService.log');
我会使用 path
模块中的 resolve
方法。来自 的选择答案突出了 resolve
方法的优势:
If you don't provide a path that specifies the root directory then the
paths given to the resolve function are appended to the current
working directory.
所以我会将路径指定为:
const { resolve } = require('path');
const log = resolve('logs', 'MyService.log');
在这个简单的应用程序中,两个不同的文件 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')
尝试使用路径模块(核心)使用绝对文件路径,而不是相对路径。
const path = require('path');
const loggerPath = path.join(__dirname, '..', 'logs', 'MyService.log');
我会使用 path
模块中的 resolve
方法。来自 resolve
方法的优势:
If you don't provide a path that specifies the root directory then the paths given to the resolve function are appended to the current working directory.
所以我会将路径指定为:
const { resolve } = require('path');
const log = resolve('logs', 'MyService.log');