看了一些资料,尝试着自己写一个基于node.js的简单的日志服务器。该服务器开启服务,监听某端口,调用时通过URL传递参数作为日志内容,日志服务器获取参数后,将其写入日志文件。
写入日志文件的主程序log.js如下:
var fs = require('fs');
var buffersize = 30000;
exports.init = function(logfile){
if(logfile){
var buffer = new Buffer(buffersize);
var fd = fs.openSync(logfile,'a');
}
function writeLog(type,logmsg){
var log = {type:type,msg:logmsg,time:getTime()};
console.log(formatLogMsg(log));
fs.writeSync(fd,formatLogMsg(log),0,0,null);
}
return {
log: function(type,logmsg){writeLog(type,logmsg)},
};
}
//格式化日志内容
function formatLogMsg(log){
return [log.time,log.type,log.msg] + "\n";
}
function getTime() {
var t = new Date();
return [t.getFullYear(), '-', add0(t.getMonth() + 1) , '-', add0(t.getDate()), ' ',
add0(t.getHours()), ':', add0(t.getMinutes()), ':', add0(t.getSeconds())].join('');
}
function add0(num) {
return num > 9 ? num : '0' + num;
}
日志服务器启动程序代码http_log.js如下:
var http = require("http");
var url = require("url");
var log = require('./log');
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
var params = url.parse(request.url, true).query;
input = params.log;
logclass = log.init('httplog.log');
logclass.log('err',input);
response.write("error has been write into log file!\n");
response.end();
}).listen(8100);
node http_log.js运行该脚本,启动日志服务器:
在另一台机器上输入http://192.168.1.171:8100/?log=user login failed. 就可以将日志信息‘user login failed’记录到日志服务器上了。
很简单,也很方便。我们还可以将其封装成WebService的形式,供其它程序调用。