在Node+Koa项目中使用log4js库来配置和管理日志系统

log4js是一个灵活的日志库,它允许你通过不同的方式(如控制台、文件等)记录信息,并根据日志的级别(如DEBUG、INFO、WARN、ERROR等)来控制日志的输出。下面附上我的代码

import log4js from 'log4js'
import path from 'path'
import config from '../configs.js' //导入配置信息

const logConfig = config.log
const isPm2 = process.env.DEPLOY === 'pm2' //判断是否在使用PM2  这里是决定日志的输出方式(控制台或控制台+文件)。
let appenders = isPm2 ? ['STDOUT'] : ['STDOUT', 'LOGFILE']
log4js.configure({
  //定义了如何输出日志,如控制台或文件
  appenders: {
    STDOUT: {
      type: 'console',
      layout: {
        type: 'pattern',
        pattern: '%[%X{id}|%c|%p|%d{yyyy-MM-dd hh:mm:ss}|%x{portal}|pid:%z:%]%n%m',
        tokens: {
          portal: logConfig.appName
        }
      }
    },
    LOGFILE: {
      type: 'dateFile',
      filename: path.join(process.cwd(), 'log/' + logConfig.appName),
      pattern: '-yyyy-MM-dd.log',
      alwaysIncludePattern: true,
      // maxLogSize: 10485760, // 10MiB
      maxLogSize: 52428800, // 50MiB
      backups: 30,
      keepFileExt: true,
      layout: {
        type: 'pattern',
        // 通过pattern和tokens来定义日志的具体格式,包括时间戳、日志级别、日志分类等信息。
        // pattern: '%c|%d{yyyy-MM-dd hh:mm:ss}|%X{source}|%x{portal}|%m',
        pattern: '%X{id}|%c|%p|%d{yyyy-MM-dd hh:mm:ss}|%x{portal}|pid:%z:%n%m',
        tokens: {
          portal: logConfig.appName
        }
      }
    }
  },
  //定义了不同日志分类的级别和输出目标
  categories: {
    default: { appenders: appenders, level: logConfig.normalLevel },
    CLIENT: { appenders: appenders, level: logConfig.normalLevel },
    NODE: { appenders: appenders, level: logConfig.normalLevel }
  },
  //以及其他配置如pm2和disableClustering(与PM2相关)、replaceConsole(是否替换Node.js的内置console方法)
  pm2: isPm2,
  disableClustering: isPm2,
  replaceConsole: true
})
// 该函数接收一个category(日志分类)和params(额外的上下文信息)作为参数
export default function (category, params) {
  let logger = log4js.getLogger(category)
  for (let key in params) {
    if (params.hasOwnProperty(key)) {
      logger.addContext(key, params[key])
    }
  }
  return logger
};

总之,这段代码通过log4js库为Node.js项目配置了一个灵活的日志系统,支持根据不同的部署环境(如是否使用PM2)和日志分类来定制日志的输出方式和格式。通过为日志记录器添加上下文信息,还可以在日志中嵌入更多的有用信息,以便于问题的排查和定位。

log日志附图

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
socket.io和koa是两个不同的技术,分别用于实现实时通信和构建Web应用程序。Socket.io是一个JavaScript库,用于在客户端和服务器之间建立双向通信,常用于构建实时聊天室、游戏和实时协作应用。而Koa是一个Node.js的Web应用框架,用于构建高效、可扩展的Web应用程序。 如果你想在koa实现一个聊天室,你可以结合使用socket.io和koa。首先,你需要安装相应的依赖: ``` npm install koa npm install socket.io ``` 然后,你可以创建一个koa应用程序,并在其配置socket.io: ```javascript const Koa = require('koa'); const app = new Koa(); const server = require('http').createServer(app.callback()); const io = require('socket.io')(server); // 处理socket连接 io.on('connection', (socket) => { console.log('A user connected'); // 处理客户端发送的消息 socket.on('chat message', (msg) => { console.log('message: ' + msg); // 广播消息给所有客户端 io.emit('chat message', msg); }); // 处理socket断开连接 socket.on('disconnect', () => { console.log('A user disconnected'); }); }); // 启动服务器 server.listen(3000, () => { console.log('Server listening on port 3000');}); ``` 在上面的代码,首先创建了一个koa应用程序,并创建了一个HTTP服务器。然后,通过socket.io库将服务器和koa应用程序连接起来。在`io.on('connection')`回调处理socket连接事件,当有客户端连接时会输出一条日志。在`socket.on('chat message')`回调处理客户端发送的消息,并通过`io.emit('chat message')`广播给所有客户端。最后,在`socket.on('disconnect')`回调处理socket断开连接事件。 这只是一个简单的示例,你可以根据自己的需求来扩展和定制。希望对你有帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值