sheercms
Version:
Sheer Cliff CMS is a simple and powerful content management system (CMS) for Node JS.
169 lines (151 loc) • 5.17 kB
JavaScript
var logger = require('../logger');
var api = require('../api');
var S = require('string');
var config = require('../config');
var cms = require("../../index");
var path_mod = require("path");
var fs = require("fs");
var async = require("async");
var moment = require('moment');
/*
name: the name of the log file
level: the level integer to filter on (optional). All levels >= this will be returned.
callback: (err, log {name, path, level, entries[]} )
*/
module.exports.getLog = function(name, level, callback) {
try {
//get the file from the log folder
var folder = getLogFolder();
var path = path_mod.join(folder, name);
fs.readFile(path,'utf-8',function(err,text){
try {
if (err) {
logger.error(err);
if (callback) callback(err);
}
else {
var json = text && text.length > 0 ? '[' + text + ']' : '[]';
json = json.replace(/(\r\n|\n|\r)/gm, ',');
if (S(json).endsWith(",]")) {
json = S(json).chompRight(",]").s + "]";
}
var entries = JSON.parse(json);
var arr = [];
if (entries && entries.length > 0) {
for(var i = 0; i < entries.length; i++) {
var entry = entries[i];
entry.line = i + 1;
entry.levelText = getLevelText(entry.level);
var dt = new moment(entry.time);
entry.formattedTime = dt.format("YYYY-MM-DD hh:mm:ss.SSS A");
if (!level || isNaN(level) || entry.level >= level)
arr.push(entry);
}
}
var log = {
name: name,
path: path,
level: level,
entries: arr
}
if (callback)
callback(null, log);
}
}
catch(e) {
logger.error(e);
if (callback) callback(e);
}
});
}
catch(e) {
logger.error(e);
if (callback) callback(e);
}
};
function getLevelText(level) {
if (level === 10)
return "trace";
else if (level === 20)
return "debug";
else if (level === 30)
return "info";
else if (level === 40)
return "warn";
else if (level === 50)
return "error";
else if (level === 60)
return "fatal";
else
return "unknown";
}
/*
callback: (err, logs []{name, size, modified} )
*/
module.exports.getLogs = function(callback) {
if (!callback)
return;
try {
logger.debug("logging-api.getLogs - entering method.");
//read the files from the log folder
var folder = getLogFolder();
logger.debug("logging-api.getLogs - log folder: " + folder);
fs.readdir(folder, function (err, files) {
try {
if (err) {
logger.error(err);
callback(err);
}
else {
var logs = [];
//for each file, get the date modified and file size
async.each(files, function (file, done) {
try {
var p = path_mod.join(folder, file);
fs.stat(p, function (err, stats) {
if (err) {
done(err);
}
else {
var obj = {
name: file,
size: stats.size,
modified: stats.mtime
}
logs.push(obj);
done();
}
});
}
catch(e) {
done(e);
}
}, function (err) {
if (err) {
logger.error(err);
callback(err);
}
else {
callback(null, logs);
}
});
}
}
catch(e) {
logger.error(e);
callback(e);
}
});
}
catch(e) {
logger.error(e);
callback(e);
}
};
function getLogFolder() {
var logging = config.settings.logging;
var path = logging.path;
if (path && path.indexOf("~/") == 0)
path = path_mod.join(cms.getRoot(), path.substr(2));
return path_mod.dirname(path);
}