2012-04-06 123 views

回答

14

不幸的是,pesho提到的補丁似乎仍然沒有被納入正式版(見pull request #149 stephenbeeson的評論)。

因此,我使用了一種替代方法。溫斯頓比較name屬性,你可以自己定義的名字騙它:

winston = require 'winston' 

logger = new winston.Logger 
    transports: [ 
    new winston.transports.File 
     name: 'file#debug' 
     level: 'debug' 
     filename: '/tmp/debug.log' 
    new winston.transports.File 
     name: 'file#error' 
     level: 'error' 
     filename: '/tmp/error.log' 
    ] 
logger.error 'error' # both logs 
logger.debug 'debug' # on debug log 

也許不是優雅,但至少它的工作原理。

9

在此期間,您可以像使用相同的接口,以便

var winston = require('winston'); 
var configs = require('./env.js'); 

var debug = new winston.Logger({ 
    levels: { 
    debug: 0 
    }, 
    transports: [ 
    new (winston.transports.File)({ filename: configs.PATH_TO_LOG, level: 'debug'}), 
    new (winston.transports.Console)({level: 'debug'}) 
    ] 
}); 

var info = new winston.Logger({ 
    levels: { 
    info: 1 
    }, 
    transports: [ 
    new (winston.transports.File)({ filename: configs.PATH_TO_LOG, level: 'info'}), 
    new (winston.transports.Console)({level: 'info'}) 
    ] 
}); 

var warn = new winston.Logger({ 
    levels: { 
    warn: 2 
    }, 
    transports: [ 
    new (winston.transports.File)({ filename: configs.PATH_TO_LOG, level: 'warn'}), 
    new (winston.transports.Console)({level: 'warn'}) 
    ] 
}); 

var error = new winston.Logger({ 
    levels: { 
    error: 3 
    }, 
    transports: [ 
    new (winston.transports.File)({ filename: configs.PATH_TO_LOG, level: 'error'}), 
    new (winston.transports.Console)({level: 'error'}) 
    ] 
}); 

var exports = { 
    debug: function(msg){ 
    debug.debug(msg); 
    }, 
    info: function(msg){ 
    info.info(msg); 
    }, 
    warn: function(msg){ 
    warn.warn(msg); 
    }, 
    error: function(msg){ 
    error.error(msg); 
    }, 
    log: function(level,msg){ 
    var lvl = exports[level]; 
    lvl(msg); 
    } 
}; 

module.exports = exports; 

這將包括基本的溫斯頓API實現一個基本的包裝。可擴展元數據等等...

4

你只需要給傳輸自定義name屬性,因此您不必碰撞:

const logger = new (winston.Logger)({ 
    transports: [ 
    new (winston.transports.Console)(), 
    new (winston.transports.File)({ name: 'text', filename: logFile, json: false }), 
    new (winston.transports.File)({ name: 'json', filename: logFileJson }) 
    ] 
}); 

你可以閱讀更多有關在多個傳輸該文檔:https://github.com/winstonjs/winston#multiple-transports-of-the-same-type

+0

我試過這個,但消息不斷寫入兩個,我不知道如何指定何時寫入哪一個。我最終只需要製作一個單獨的記錄器,以便在需要時定位該單獨的文件。 – 2017-05-01 23:42:49