我尝试使用winston登录文件,我有一个模块用于此任务,如下所示:
var logger = require('winston');
logger.add(logger.transports.File, {filename: '../../logs/logs.log', logstash: true});
logger.remove(logger.transports.Console);
function log(type, message) {
logger.log(type, message, function(err, level, msg){
if(err){
console.log('error:', err);
}
});
}
module.exports = {
log: log,
logger: logger
};
我已尝试将logger对象本身和我自己的日志功能导出。
我第一次访问localhost
时我什么都没得到(没有日志)。我第二次得到"错误:运输处于失败状态。"
但是,如果我通过调用我的log()
函数来运行此模块,它可以正常工作并按预期记录到文件。
如何从其他模块创建winston日志文件?或者如何制作记录到文件的winston记录器。
记录到控制台始终有效。
完整的错误消息:
error: { [Error: Transport is in a failed state.]
transport:
{ domain: null,
_events: { error: [Function] },
_maxListeners: undefined,
silent: false,
raw: false,
name: 'file',
formatter: undefined,
level: undefined,
handleExceptions: false,
exceptionsLevel: 'error',
humanReadableUnhandledException: false,
filename: 'logs.log',
_basename: 'logs.log',
dirname: '../../logs',
options: { flags: 'a', highWaterMark: 24 },
json: true,
logstash: true,
colorize: false,
maxsize: null,
rotationFormat: false,
zippedArchive: false,
maxFiles: null,
prettyPrint: false,
label: null,
timestamp: true,
eol: '\n',
tailable: false,
depth: null,
showLevel: true,
maxRetries: 2,
stringify: undefined,
_size: 0,
_created: 0,
_buffer: [],
_draining: false,
_opening: false,
_failures: 2,
_archive: null,
_onError: [Function],
opening: false,
_stream:
{ _writableState: [Object],
writable: true,
domain: null,
_events: [Object],
_maxListeners: Infinity,
path: '../../logs/logs.log',
fd: null,
flags: 'a',
mode: 438,
start: undefined,
pos: undefined,
bytesWritten: 0,
destroyed: true },
_isStreams2: true } }
答案 0 :(得分:1)
我刚刚意识到这个问题是在9个月前发布的。反正...
我认为你正在增加并发症。
我是这样做的:
// logger.js
var winston = require('winston');
var logger = new (winston.Logger)({
transports: [
new(winston.transports.File)({
filename:'PATH_TO_LOG_FILE',
handleExceptions: true,
prettyPrint:true
})
// In case you need more transports uncomment:
//,
//new (winston.transports.Console)({
// level:'silly',
// handleExceptions: true,
// prettyPrint:true
//})
],exitOnError:false
});
module.exports=logger;
在其他文件中使用记录器,只需:
var logger = require("PATH_TO_LOGGER");
logger.error("Unable to do stuff",err);
答案 1 :(得分:1)
分享我的发现:当我的记录器今天早上未能登录新功能(非常小)时,我感到很震惊。记录器之前正在工作。
原因:file.js中的log()(在winston库中)无法写入,因为 this.opening 标志仍然为true。我添加了一个小的超时例程来等待,超时允许打开完成。
希望这有帮助。
答案 2 :(得分:0)
因为记录器对于所有系统至关重要,
我的方法是将记录器放在global
变量上,然后您可以从应用程序中的每个页面/模块进行记录。