我是开发的新手,今年早些时候开始使用node.js并非常喜欢它。我一直在逐步增加node.js中的日志记录机制。从console.log开始,现在正在使用RAM磁盘将所有内容记录到RAM磁盘中的文件中。
这种登录RAM磁盘的方法接近我的要求。我不想要永久文件,但我确实想要一些持久性,这样如果我的node.js崩溃,我就不会丢失我以前的日志。我正在永远使用自动重启节点,这意味着我没有活动终端,我可以实时查看日志和错误。相反,我有一个GET方法,它从RAM磁盘读取所有日志并将其提供给我。
以下是我在RAM磁盘和内存缓冲区中保存日志的代码:
function generateLog(level, logMsg) {
var logLevel;
if(level == levelOff)
return; // no need to go any further, logging has been disabled.
else if(level == levelDebug)
logLevel = "DEBUG: ";
else if(level == levelInfo)
logLevel = "INFO: ";
else if(level == levelWarning)
logLevel = "WARNING: ";
else if(level == levelError)
logLevel = "ERROR: ";
else if(level == levelException)
logLevel = "EXCEPTION: ";
if (level >= loggingLevel){
console.log(logLevel + logMsg);
checkIfFileExists(logFile, function(err,status){
if(err){ // if file does not exist, save it to memory buffer
logBuffer = logBuffer + '<br>' + logLevel + logMsg; // memory
}
else{ // file exists - save it to this file in RAM_disk
fs.appendFile(logFile, logLevel + logMsg + '\n', function(err) {
if(err) {
return console.log(err);
}
});
}
});
}
}
问题是当节点进程由于异常或错误而崩溃时,那么就不会记录到RAM磁盘。
请建议如何记录节点中的错误和异常。
答案 0 :(得分:2)
当nodejs检测到未处理的错误时,它将崩溃。 你需要有一个process.on('uncaughtException')钩子来捕获并记录错误。一个例子是;
process.on('uncaughtException', function (err) {
if (err) {
console.log("caughtException but no error msg" + err.stack);
process.exit(1);
}
});
此钩子只应用于检测问题。当这种情况发生时通常无法恢复,因此退出流程是个好主意。您将在日志中拥有堆栈以查看实际故障。
您可能还想添加process.on('exit')挂钩,以确定进程是否因应用程序错误或其他方式而崩溃;例如“systemctl restart”。