2012-03-04 316 views

回答

1

在socket.io中,您可以設置一個custom logger.我試着分配一個log4js記錄器,但是這導致了一個錯誤。我懷疑你(和我)將不得不編寫一個包裝器,它將日誌記錄調用傳遞給log4js。

這是我最後寫代碼:

var LogWrapper = function() { 
    this.logger = log4js.getLogger('socket.io'); 
}; 
LogWrapper.prototype.error = function() { 
    this.logger.error.apply(this.logger, arguments); 
}; 
LogWrapper.prototype.warn = function() { 
    this.logger.warn.apply(this.logger, arguments); 
}; 
LogWrapper.prototype.info = function() { 
    this.logger.info.apply(this.logger, arguments); 
}; 
LogWrapper.prototype.debug = function() { 
    this.logger.debug.apply(this.logger, arguments); 
}; 
io.set('logger', new LogWrapper()); 
0

我有這個問題以及建立一個基於控制檯的實用程序。我希望該實用程序將其輸出寫入控制檯,但將日誌保存在文件中。無論我如何嘗試,我似乎都無法分開兩個輸出緩衝區。

的解決方案是一個類別添加到控制檯的appender在log4js.configure調用,就像這樣:

var log4js = require('log4js'); 

log4js.configure({ 
    appenders: [ 
    { type: 'console', category: 'thiswillgotoconsole' }, 
    { type: 'file', filename: 'myLog.log', category: 'thiswillgotofile' } 
    ] 
}); 

var logger = log4js.getLogger('thiswillgotofile'); 
logger.setLevel('debug'); 

logger.debug('thiswillgotofile'); 
console.log('thiswillgotoconsole'); 
0

如果有人應該在此,而舊線絆倒,請注意,(同時?)也可以通過配置禁用日誌記錄控制檯。

只需設置 replaceConsole: true 在配置 @see Example on github

不知道它是否真的可以解決你計劃要達到什麼,但可以肯定你會做日誌從控制檯消失這樣做

0

下面是我如何得到這個工作:

問題是appender config的默認類別是'[all]'。 設置類別爲「[默認]」,它將僅適用於與「得到」了一個類別伐木工人:log4js.getLogger()

{ 
    appenders: [ 
    { type: 'console', category: '[default]' }, 
    { type: 'file', filename: 'logs/cheese.log', category: 'cheese' } 
    ] 
} 

更多的解釋:

你可能有/有東西看起來像例子中的appender配置

{ 
    appenders: [ 
    { type: 'console' }, 
    { type: 'file', filename: 'logs/cheese.log', category: 'cheese' } 
    ] 
} 

然後您可以通過使用或不使用類別名稱獲得日誌:

var logger = log4js.getLogger(); 
var cheeseLogger = log4js.getLogger('cheese'); 

logger.info(1) 
cheeseLogger(2) 

輸出:

[2016-10-25 15:43:06.225] [INFO] [default] - 1 
[2016-10-25 15:43:06.225] [INFO] cheese - 2 

日誌/ cheese.log:

[2016-10-25 15:43:06.225] [INFO] cheese - 2