【问题标题】:Path Problems when Creating bunyan Child Logger创建 bunyan Child Logger 时的路径问题
【发布时间】:2019-03-18 15:16:12
【问题描述】:

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

问题: foo.js 工作正常,但 bar.js 在查找 Logger.js 中定义的 MyService.log 时遇到问题。这似乎是由于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')

【问题讨论】:

    标签: javascript node.js logging npm bunyan


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我会使用来自path 模块的resolve 方法。来自this question 的选择答案突出了resolve 方法的优势:

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

      所以我将路径指定为:

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

      【讨论】:

        猜你喜欢
        • 2018-06-18
        • 2017-07-17
        • 2011-08-05
        • 2014-09-26
        • 2012-12-22
        • 1970-01-01
        • 2017-05-19
        • 2016-03-19
        • 1970-01-01
        相关资源
        最近更新 更多