在日志库log4js中添加api请求日志的配置
const log4js = require("log4js");
const path = require('path');
function getCommonAppender(paths) {
return {
type: 'datefile',// 日志文件保存为一个文件dateFile:日期命名的文件, file:默认文件, stdout,日志
filename: path.resolve(__dirname, 'logs', paths, 'logging.log'),
maxLogSize: 50,// 配置单个文件的最大字节数
keepFileExt: true,// 保持文件后缀名,
daysToKeep: 3, // 日志保存的事件
layout: {
type: 'pattern',// 自定义出口文件,
pattern: '%c [%d{yyyy-MM-dd hh:mm:ss}] %p: %m%n'
}
}
}
log4js.configure({
appenders: { // 分类出口
sql: getCommonAppender('sql'), //定义一个sql日志出口
default: { // 默认出口必须要有
type: 'stdout',
filename: path.resolve(__dirname, 'logs', 'default', 'logging.log'),
maxLogSize: 50,// 配置单个文件的最大字节数
keepFileExt: true,// 保持文件后缀名,
layout: {
type: 'pattern',// 自定义出口文件,
pattern: '%c [%d{yyyy-MM-dd hh:mm:ss}] %p: %m%n'
}
},
api: getCommonAppender('api')
},
categories: { // 分类
sql: {
appenders: ['sql'], // 该出口使用出口sql的配置写入日志,跟分类出口的名字保持一直
level: 'all',
},
default: { // 默认分类必须要有
appenders: ['default'],
level: 'all',
},
api: {
appenders: ['api'], // 该出口使用出口api的配置写入日志,跟分类出口的名字保持一直
level: 'all',
},
}
})
process.on('exit', () => {
log4js.shutdown(); // 程序退出的时候,把没有记录完整的日志记录完整
})
exports.loggerSqlL = log4js.getLogger("sql"); // 传入一个log分类
exports.loggersDefault = log4js.getLogger("default"); // 传入一个log分类
exports.loggersApi = log4js.getLogger('api'); // 传入一个log分类
- 在分类,配置中添加api配置,和分类
- 最后导出api日志记录,
exports.loggersApi = log4js.getLogger('api'); // 传入一个log分类
创建一个日志记录的中间件
使用自定义的log
const { loggersApi } = require('../../log4js');
// 1 .使用手动日志记录
module.exports = function (req, res, next) {
loggersApi.debug(`${req.method} ${req.path} ${req.ip}`);
next();
}
使用express框架子自带的logg
``json const { loggersApi } = require('../../log4js'); const log4js = require('log4js'); // 1 .使用手动日志记录 // module.exports = function (req, res, next) { // loggersApi.debug(
${req.method} ${req.path} ${req.ip}`); // next(); // }
// 2.使用自动日志记录 module.exports = log4js.connectLogger(loggersApi, { level: ‘auto’ })
- level: 'auto' 是定义了日志记录级别
- 更多配置见官网 [https://log4js-node.github.io/log4js-node/connect-logger.html](https://log4js-node.github.io/log4js-node/connect-logger.html)
<a name="t4VOg"></a>
## 在初始化的时候使用日志中间件
```json
const express = require('express');
const app = express();//创建一个以express应用,app实际上是一个函数,用于处理请求的函数
const path = require('path');
const rootPath = path.resolve(__dirname, '../public');
const cookieParser = require('cookie-parser');
const cors = require('cors');
const session = require('express-session');
const whiteApi = ['http://localhost:3333'];
// 使用session中间件
app.use(session({
secret: 'lantong',
name: 'sessionid'
}))
// 使用跨域中间件
app.use(cors({
origin(origin, callback) {
if (!origin) { // 不是跨域的情况
callback(null, '*'); // *在这里无意义,可以自行定义
return;
}
if (whiteApi.includes(origin)) {
callback(null, origin);
} else {
callback(new Error("not allowed"));
}
},
credentials: true,
exposedHeaders: ['authorization']
}))
// 设置以后,会自动在req里面添加cookies属性,用于获取所有带来过来的cookies
// 设置以后,会在res对象中注入cookie方法,用于设置cookie
// app.use(cookieParser('1111')) // 使用111对cookie加密
app.use(cookieParser());
app.use(require('./middlewares/tokenHandleware'))
// 设置跨域请求
// app.use(require('./middlewares/coresHandleware'))
/***
* 发送请求的时,会根据请求的路径,从指定的目录中查找是否存在该文件,如果存在,则相应文件内容,而不再移交给后续的中间件,
* 如果不存在文件,则直接移交给后续的中间件
*/
app.use(express.static(rootPath, {
index: 'index.html' //默认访问页面,默认值为index.html,可修改
}));
// app.use('/static', express.static(rootPath))// 也可以针对访问某个指定api路径,来标识需要 返回静态资源
/***
* 默认res无法解析post请求的参数,也就是请求体
* 使用该中间件后表示,当Content-Type是"application/x-www-form-urlencoded",使用该中间件处理
*/
app.use(express.urlencoded({
extended: true
}))
/***
* 默认res无法解析post请求的参数,也就是请求体
* 使用该中间件后表示,当Content-Type是"application/json",使用该中间件处理
*/
app.use(express.json())
app.use('/api/admin', require('./api/admin'));
// 使用日志记录件中间件
app.use(require('./middlewares/logApiware'));
// 除了api请求
app.use('/api/student', require('./api/student'))
app.use(require('./middlewares/errMiddleware')) // 处理所有的错误请求
app.listen(12306, () => {
console.log('server on 12306 has started')
})
- 在api请求之前使用中间
app.use(require('./middlewares/logApiware'));
- 静态资源不需要日志记录,否则可以放在开头