我一直在研究为SysLog定义用户服务。基本上,实现第三方日志服务(Papertrail)。设置起来很简单。
cf cups papertrail -l syslog://papertail_url:port
它似乎工作正常,但我没有真正详细查看日志是否正在耗尽'正常。并且..我的公司不允许我们与第三方存储日志。所以......我编写了自己的SysLog服务器,并设置了一个指向我服务器的用户服务。
日志开始流动但很快,我在套接字上的读取只会阻塞很长时间..然后会有更多数据进入..但它之间缺少大量数据。请记住,我正在进行日志记录的Web应用程序也非常简单。只会在故意错误时产生一些消息和堆栈跟踪。
但问题是日志的流量不够频繁,而且当它发生时...它会错过很多数据。
所以,我再次设置PaperTrail,看看这是不是我的代码。但是......同样的。即使流向PaperTrail也不能100%工作。你得到一些日志消息..等待很长时间..然后再多一些。还有更多人被遗漏了。
Cloud Foundry Loggregator服务似乎在这里工作不正常。有没有人遇到像我一样的问题?这是来自BlueMix。
注意:我确实读过,如果在短时间内创建了许多日志消息,您将错过消息..但这不是这种情况。我还检查了我的Bluemix日志,看看是否有关于SysLog失败的消息..但我找不到任何消息。
提前致谢...
答案 0 :(得分:1)
其他人报告了同样的问题。 Loggregator已经进行了一些更改以尝试解决此问题。它正在积极开展工作。
您是否可以使用此信息打开REMOTE
,IBM会让您更新?
答案 1 :(得分:1)
这是一个由IBM正在调查的已知问题。不幸的是,目前还没有任何解决方法。
答案 2 :(得分:1)
我通过使用模块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等来进行外部和内部日志记录。 >
确定不是一个非常优雅的解决方案,但它目前正在工作(例如,我可以在外部记录所有消息而不会丢失任何消息)
詹姆斯。