2016-09-23 36 views
0

这是我的温斯顿记录器是什么样子:温斯顿记录不保存日志正确 - 两个目录创建

var winston = require('winston') 
var moment = require('moment') 
var fs = require('fs') 
var logDir = 'logs' 

// Create the log directory if it does not exist 
if (!fs.existsSync(logDir)) { 
    fs.mkdirSync(logDir) 
} 

function formatter (options) { 
    if (options.level === 'error') { 
    return options.timestamp() + ' *** ' + options.level.toUpperCase() + ' *** ' + (undefined !== options.message ? options.message : '') + 
     (options.meta && Object.keys(options.meta).length ? ' ' + JSON.stringify(options.meta) : ' ') 
    } else if (options.level === 'info') { 
    return options.timestamp() + ' - ' + options.level.toUpperCase() + ' - ' + (undefined !== options.message ? options.message : '') + (options.meta && Object.keys(options.meta).length ? ' ' + JSON.stringify(options.meta) : '') 
    } 
} 

var systemLogger = new (winston.Logger)({ 
    transports: [ 
    new (winston.transports.Console)({ 
     timestamp: function() { 
     return moment().format('D/MM/YYYY HH:mm:ss:SSS') 
     } 
    }), 
    new (require('winston-daily-rotate-file'))({ 
     filename: 'logs/-system.log', 
     datePattern: 'dd-MM-yyyy', 
     prepend: true, 
     json: false, 
     timestamp: function() { 
     return moment().format('D/MM/YYYY HH:mm:ss:SSS') 
     }, 
     formatter: formatter 
    }) 
    ] 
}) 

module.exports = systemLogger 

对我来说,它看起来像一切都在上面的代码罚款。但是,有两个错误...不是在项目目录中创建一个名为'logs'的目录,程序会创建两个名为'logs'的目录 - 一次在项目目录中,一个在目录之外。任何想法为什么?

所以在我实际的程序,我把这样的记录:

// winston logger 
var systemLogger = require('./logging.js') 

    systemLogger.info(Server Updated', { 
     'ip': ip 
    }) 

无处我指定我想两个“logs”目录,所以林略有困惑。任何帮助,将不胜感激。

回答

-1

这是因为当您使用“fs”模块创建目录时,它会在您的文件所在的同一级别创建新目录。但是使用Winston,它在项目级创建了目录(文件名:'logs/-system.log')。 这就是为什么创建两个目录。

+0

Winston本身不会创建日志目录?我怎样才能解决这个问题? – deeveeABC

+0

我担心这不起作用,因为winston本身并没有创建一个名为'logs'的文件夹 – deeveeABC

+0

Winston不会创建目录,它会搜索服务器主文件运行路径上的日志文件夹。如果它在该路径中找到“logs”文件夹,那么它将在该目录中创建“-system.log”文件或不起作用。所以首先检查一下winston的流程并实现它。 –