我們想用Winston來記錄Node.js.但是,我們無法弄清楚如何擁有兩個日誌文件:一個僅用於錯誤,另一個用於其他所有內容。Winston的多個日誌文件?
但是,這樣做並不奏效,但是:添加多個winston.transports.File
傳輸會產生錯誤。
Others have run into this problem, with vague hints of a solution, but no real answer。
任何想法?
我們想用Winston來記錄Node.js.但是,我們無法弄清楚如何擁有兩個日誌文件:一個僅用於錯誤,另一個用於其他所有內容。Winston的多個日誌文件?
但是,這樣做並不奏效,但是:添加多個winston.transports.File
傳輸會產生錯誤。
Others have run into this problem, with vague hints of a solution, but no real answer。
任何想法?
我剛剛發送了一個拉請求,允許在一個記錄器中使用多個文件傳輸。 https://github.com/flatiron/winston/pull/149
它已經合併成flatiron/winston。
您也可以使用我的分叉回購: https://github.com/pdobrev/winston
不幸的是,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
也許不是優雅,但至少它的工作原理。
在此期間,您可以像使用相同的接口,以便
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實現一個基本的包裝。可擴展元數據等等...
你只需要給傳輸自定義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
我試過這個,但消息不斷寫入兩個,我不知道如何指定何時寫入哪一個。我最終只需要製作一個單獨的記錄器,以便在需要時定位該單獨的文件。 – 2017-05-01 23:42:49