我正在构建一个日志模块,可以由位于不同文件中的多个调用者调用。
我的目标是在程序开始时初始化日志文件,并让调用者只调用一个函数,该函数将记录到之前初始化的文件中,而无需再次进行整个初始化。
我不太了解模块导出的概念,因此希望您能提供帮助。
实际的日志记录发生在方法 write 上。在主 app.js 文件上,我可以很好地启动和记录。
但是在另一个文件上,我对如何在不重新创建日志文件的情况下登录文件有一个心理障碍。
var fs = require('fs');
var fd = {},
log = {},
debug = false;
var tnlog = function(env, file, hostname, procname, pid) {
if (env == 'development')
debug = true;
fd = fs.createWriteStream(file, { flags: 'a', encoding: 'utf8', mode: 0644 });
log = { hostname: hostname, procname: procname, pid: pid };
};
tnlog.prototype.write = function(level, str) {
if (debug)
console.log(str);
else {
log.timestamp = Date.now();
log.level = level;
log.str = str;
fd.write(JSON.stringify(log) + '\n');
}
};
exports.tnlog = tnlog;
这就是我初始化和登录主文件的方式:
var logfile = '/var/log/node/www/app.log';
var tnlog = require('./lib/tnlog').tnlog,
log = new tnlog(app.get('env'), logfile, os.hostname(), appname, process.pid);
如果您能提出更好的做事方式,我一定会很感激。