创建Bunyan Child Logger时的路径问题

时间:2018-10-13 17:42:21

标签: javascript node.js logging npm bunyan

在这个简单的应用程序中,两个不同的文件headhead . catMaybes $ [compute x y, compute (x+2) (y+2), compute (x+4) (y+4)] 导入foo.js来创建bar.js子记录器。

问题:Logger.js可以正常工作,但是bunyan在查找foo.js中定义的bar.js时遇到了问题。这似乎是由于固定了MyService.log的相对路径,而Logger.jsMyService.log相对于项目根目录位于不同的目录级别。

创建foo.js子记录器的更好方法是什么?

bar.js

/src/lib/Logger.js

bunyan

/src/foo/foo.js

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

/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
        })
    }
}

2 个答案:

答案 0 :(得分:2)

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

const path = require('path');

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

答案 1 :(得分:0)

我将使用resolve模块中的path方法。从this question中选择的答案突出了resolve方法的优势:

  

如果不提供指定根目录的路径,则   提供给resolve函数的路径会附加到当前   工作目录。

所以我将路径指定为:

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

const log = resolve('logs', 'MyService.log');