pikachu-be/src/utils/logger.js
2019-05-13 20:14:39 +08:00

123 lines
2.7 KiB
JavaScript

'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);
});
},
};