在日志库log4js中添加api请求日志的配置

  1. const log4js = require("log4js");
  2. const path = require('path');
  3. function getCommonAppender(paths) {
  4. return {
  5. type: 'datefile',// 日志文件保存为一个文件dateFile:日期命名的文件, file:默认文件, stdout,日志
  6. filename: path.resolve(__dirname, 'logs', paths, 'logging.log'),
  7. maxLogSize: 50,// 配置单个文件的最大字节数
  8. keepFileExt: true,// 保持文件后缀名,
  9. daysToKeep: 3, // 日志保存的事件
  10. layout: {
  11. type: 'pattern',// 自定义出口文件,
  12. pattern: '%c [%d{yyyy-MM-dd hh:mm:ss}] %p: %m%n'
  13. }
  14. }
  15. }
  16. log4js.configure({
  17. appenders: { // 分类出口
  18. sql: getCommonAppender('sql'), //定义一个sql日志出口
  19. default: { // 默认出口必须要有
  20. type: 'stdout',
  21. filename: path.resolve(__dirname, 'logs', 'default', 'logging.log'),
  22. maxLogSize: 50,// 配置单个文件的最大字节数
  23. keepFileExt: true,// 保持文件后缀名,
  24. layout: {
  25. type: 'pattern',// 自定义出口文件,
  26. pattern: '%c [%d{yyyy-MM-dd hh:mm:ss}] %p: %m%n'
  27. }
  28. },
  29. api: getCommonAppender('api')
  30. },
  31. categories: { // 分类
  32. sql: {
  33. appenders: ['sql'], // 该出口使用出口sql的配置写入日志,跟分类出口的名字保持一直
  34. level: 'all',
  35. },
  36. default: { // 默认分类必须要有
  37. appenders: ['default'],
  38. level: 'all',
  39. },
  40. api: {
  41. appenders: ['api'], // 该出口使用出口api的配置写入日志,跟分类出口的名字保持一直
  42. level: 'all',
  43. },
  44. }
  45. })
  46. process.on('exit', () => {
  47. log4js.shutdown(); // 程序退出的时候,把没有记录完整的日志记录完整
  48. })
  49. exports.loggerSqlL = log4js.getLogger("sql"); // 传入一个log分类
  50. exports.loggersDefault = log4js.getLogger("default"); // 传入一个log分类
  51. exports.loggersApi = log4js.getLogger('api'); // 传入一个log分类
  1. 在分类,配置中添加api配置,和分类
  2. 最后导出api日志记录,exports.loggersApi = log4js.getLogger('api'); // 传入一个log分类

创建一个日志记录的中间件

  1. 使用自定义的log

    1. const { loggersApi } = require('../../log4js');
    2. // 1 .使用手动日志记录
    3. module.exports = function (req, res, next) {
    4. loggersApi.debug(`${req.method} ${req.path} ${req.ip}`);
    5. next();
    6. }
  2. 使用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’ })

  1. - level: 'auto' 是定义了日志记录级别
  2. - 更多配置见官网 [https://log4js-node.github.io/log4js-node/connect-logger.html](https://log4js-node.github.io/log4js-node/connect-logger.html)
  3. <a name="t4VOg"></a>
  4. ## 在初始化的时候使用日志中间件
  5. ```json
  6. const express = require('express');
  7. const app = express();//创建一个以express应用,app实际上是一个函数,用于处理请求的函数
  8. const path = require('path');
  9. const rootPath = path.resolve(__dirname, '../public');
  10. const cookieParser = require('cookie-parser');
  11. const cors = require('cors');
  12. const session = require('express-session');
  13. const whiteApi = ['http://localhost:3333'];
  14. // 使用session中间件
  15. app.use(session({
  16. secret: 'lantong',
  17. name: 'sessionid'
  18. }))
  19. // 使用跨域中间件
  20. app.use(cors({
  21. origin(origin, callback) {
  22. if (!origin) { // 不是跨域的情况
  23. callback(null, '*'); // *在这里无意义,可以自行定义
  24. return;
  25. }
  26. if (whiteApi.includes(origin)) {
  27. callback(null, origin);
  28. } else {
  29. callback(new Error("not allowed"));
  30. }
  31. },
  32. credentials: true,
  33. exposedHeaders: ['authorization']
  34. }))
  35. // 设置以后,会自动在req里面添加cookies属性,用于获取所有带来过来的cookies
  36. // 设置以后,会在res对象中注入cookie方法,用于设置cookie
  37. // app.use(cookieParser('1111')) // 使用111对cookie加密
  38. app.use(cookieParser());
  39. app.use(require('./middlewares/tokenHandleware'))
  40. // 设置跨域请求
  41. // app.use(require('./middlewares/coresHandleware'))
  42. /***
  43. * 发送请求的时,会根据请求的路径,从指定的目录中查找是否存在该文件,如果存在,则相应文件内容,而不再移交给后续的中间件,
  44. * 如果不存在文件,则直接移交给后续的中间件
  45. */
  46. app.use(express.static(rootPath, {
  47. index: 'index.html' //默认访问页面,默认值为index.html,可修改
  48. }));
  49. // app.use('/static', express.static(rootPath))// 也可以针对访问某个指定api路径,来标识需要 返回静态资源
  50. /***
  51. * 默认res无法解析post请求的参数,也就是请求体
  52. * 使用该中间件后表示,当Content-Type是"application/x-www-form-urlencoded",使用该中间件处理
  53. */
  54. app.use(express.urlencoded({
  55. extended: true
  56. }))
  57. /***
  58. * 默认res无法解析post请求的参数,也就是请求体
  59. * 使用该中间件后表示,当Content-Type是"application/json",使用该中间件处理
  60. */
  61. app.use(express.json())
  62. app.use('/api/admin', require('./api/admin'));
  63. // 使用日志记录件中间件
  64. app.use(require('./middlewares/logApiware'));
  65. // 除了api请求
  66. app.use('/api/student', require('./api/student'))
  67. app.use(require('./middlewares/errMiddleware')) // 处理所有的错误请求
  68. app.listen(12306, () => {
  69. console.log('server on 12306 has started')
  70. })
  • 在api请求之前使用中间app.use(require('./middlewares/logApiware'));
  • 静态资源不需要日志记录,否则可以放在开头