我通过使用 winston 和 winston-papertrail 模块手动登录到 papertrail 解决了这个问题
https://github.com/kenperkins/winston-papertrail
编辑以根据要求分享我的代码
我的代码实现对于手动完成这项工作非常基本 - 我将进一步加强这一点。基本上,我在 package.json 的依赖项中包含了 winston 和 winston-papertrail 这两个模块,然后我创建了以下日志帮助程序文件:
var winston = require('winston');
//
// Requiring `winston-papertrail` will expose
// `winston.transports.Papertrail`
//
require('winston-papertrail').Papertrail;
var winstonPapertrail, logger;
module.exports = {
init: function (hostname) {
return init(hostname);
},
info: function (logText){
return log(logText,"info");
},
error: function (logText){
return log(logText,"error");
},
log: function(logText){
return log(logText,"debug")
}
}
function init(program){
winstonPapertrail = new winston.transports.Papertrail({
host: <replacethiswithyourhostname> e.g.:'logsX.papertrailapp.com',
port: <replacethiswithyourport>,
program: program,
handleExceptions: true
});
winstonPapertrail.on('error', function(err) {
// Handle, report, or silently ignore connection errors and failures
});
logger = new winston.Logger({
transports: [winstonPapertrail]
});
log(hostname+" starting","info");
}
function log(logText,level){
if(level=="info"){
console.info(logText);
logger.info(logText);
}else if(level=="error"){
console.error(logText);
logger.error(logText);
}else if(level=="debug"){
console.log(logText);
logger.debug(logText);
}
}
然后我将其保存为 javascript 文件并将其导入到我的主应用程序中,然后可以先使用公开的 .init() 方法,然后使用 .log、.info、.error 等进行外部和内部记录
我确定这不是一个非常优雅的解决方案,但它目前可以工作(例如,我可以在外部记录所有消息而不会丢失任何消息)
詹姆斯。