'use strict'; import fs from 'fs-extra'; import FileStreamRotator from 'file-stream-rotator'; import bunyan from 'bunyan'; import config from '../../config/config'; import AdminLog from '../models/admin/AdminLog'; const env = process.env.NODE_ENV || 'development'; const isDev = env === 'development'; const logDir = config.logs_path; fs.existsSync(logDir) || fs.mkdirSync(logDir); let logger = null; const createLogger = function(appName) { appName = !appName ? config.app.name : appName; const streams = [{ level: 'info', stream: FileStreamRotator.getStream({ date_format: 'YYYYMMDD', filename: `${logDir}/${appName}-%DATE%.log`, frequency: 'daily', verbose: false, }), }]; if (isDev) { streams.push({ level: 'debug', stream: process.stdout, }); } return bunyan.createLogger({ name: appName, serializers: bunyan.stdSerializers, streams: streams, src: false, }); }; export default { info(obj, msg) { if (!logger) { logger = createLogger(global.app_name); } if (msg) { logger.info(obj, msg); } else { logger.info(obj); } }, error(obj, msg) { if (!logger) { logger = createLogger(global.app_name); } if (msg) { logger.error(obj, msg); } else { logger.error(obj); } }, warn(obj, msg) { if (!logger) { logger = createLogger(global.app_name); } if (msg) { logger.warn(obj, msg); } else { logger.warn(obj); } }, debug(obj, msg) { if (!logger) { logger = createLogger(global.app_name); } if (msg) { logger.debug(obj, msg); } else { logger.debug(obj); } }, trace(obj, msg) { if (!logger) { logger = createLogger(global.app_name); } if (msg) { logger.trace(obj, msg); } else { logger.trace(obj); } }, fatal(obj, msg) { if (!logger) { logger = createLogger(global.app_name); } if (msg) { logger.fatal(obj, msg); } else { logger.fatal(obj); } }, db(req, logObj, name) { const user = req.user; const ip = req.headers['x-forwarded-for']; const path = req.baseUrl + req.path; const params = req.method === 'GET' ? req.query : req.body; const dataObj = JSON.stringify(logObj) === '{}' ? params : logObj; const obj = new AdminLog({ admin: user.id, username: user.username, path: path, method: req.method, params: dataObj, referer: req.headers['referer'], user_agent: req.headers['user-agent'], ip: ip, show_name: name, }); obj.save().then(()=>{}).catch((err)=> { logger.error(err); }); }, };