Koa入门(五)—— 使用log4j记录日志

本文介绍了如何在Koa项目中使用log4js进行日志记录,包括配置文件设置,控制台和文件输出,Sequelize SQL日志修改,以及不同级别的日志分离存储。详细讲解了debug、info、warn和error级别的日志管理和文件滚动策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装依赖:yarn add log4js

log4js 配置信息

编写log4js配置文件 log4js.js

export default {
  appenders: {
    'STDOUT': {
      type: 'stdout'
    },
    'FILE_ALL': {
      type: 'file',
      filename: 'all.log',
      maxLogSize: 10485760,
      backups: 10
    }
  },
  categories: {
    default: {
      appenders: ['STDOUT', 'FILE_ALL'],
      level: 'debug'
    }
  }
};

这里配置了两种日志输出

  • STDOUT :输出到控制台中
  • FILE_ALL :输出到 all.log 文件中,还配置了文件最大值为 10M ,当超过最大值时,就会把当前的 all.log 日志文件改名,然后新建一个 all.log 文件记录日志,之前的日志最多保留 10 个。

这两个日志输出都是 debug 级别的,就是会输出 debug, info, warn, error 这几个级别的日志(我一般只用这4个级别,还有 trace, fatal, mark 等级别)。

log4js 工具

新建日志工具类 Log4jsUtil.js

import log4js from 'log4js';
import log4jsConfig from '@main/config/log4js';

log4js.configure(log4jsConfig);

// 这里获取的是 categories 下的 default 日志记录器
const defaultLogger = log4js.getLogger();

export const debug = (message) => {
  defaultLogger.debug(message);
};

export const info = (message) => {
  defaultLogger.info(message);
};

export const warn = (message) => {
  defaultLogger.warn(message);
};

export const error = (message) => {
  defaultLogger.error(message);
};

日志使用

就可以在其他地方使用 log4js 了:

import { debug, info, warn, error } from '@main/util/Log4jsUtil';

debug(`这是debug信息`);

info(`这是info信息`);

warn(`这是warn信息`);

error(`这是error信息`);

修改 Sequelize 的 SQL 日志输出

修改 数据库配置:

import { info } from '@main/util/Log4jsUtil';

export default {
  // 其他配置...
  db: {
    username: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    host: process.env.DB_HOST,
    database: process.env.DB_DATABASE,
    dialect: process.env.DB_DIALECT,
    define: {
      // 数据库字段下划线命名,匹配模型驼峰式命名
      underscored: true,
      // 禁用修改表名
      freezeTableName: true
    },
    timezone: '+08:00',
    // 返回的时间格式配置
    dialectOptions: {
      dateStrings: true,
      typeCast: true
    },
    logging: (sql) => info(sql)
  }
};

多种输出日志配置

一般我们会使用一个日志文件存储所有日志,就像上面的 all.log

但是我们在线上环境一般会比较关注错误日志,就是 error 级别的,用于排错,但是系统的debug和info输出正常都会输出很多信息,如果直接查看 all.log 日志可能会看的眼花。这时我们就需要一个 error.log 来专门记录 error 级别的日志信息。

export default {
  appenders: {
    'STDOUT': {
      type: 'stdout'
    },
    'FILE_ALL': {
      type: 'datefile',
      filename: 'all.log',
      daysToKeep: 30,
      keepFileExt: true
    },
    'FILE_ERROR': {
      type: 'datefile',
      filename: 'error.log',
      daysToKeep: 30,
      keepFileExt: true
    }
  },
  categories: {
    default: {
      appenders: ['STDOUT', 'FILE_ALL'],
      level: 'debug'
    },
    error: {
      appenders: ['FILE_ERROR'],
      level: 'error'
    }
  }
};

这里 appenders 添加了 FILE_ERROR 配置,categories 中也新增了 error 配置。

这里使用了 datefile ,log4js 会按照日期分日志,一天一个文件,每过一天都会把前一天的 all.log 重命名为 all.2020-05-17.log ,最多保留 daysToKeep 天的日志(如果为 0 不限制)

修改工具类:

import log4js from 'log4js';
import log4jsConfig from '@main/config/log4js';

log4js.configure(log4jsConfig);

const defaultLogger = log4js.getLogger();
const errorLogger = log4js.getLogger('error');

export const debug = (message) => {
  defaultLogger.debug(message);
};

export const info = (message) => {
  defaultLogger.info(message);
};

export const warn = (message) => {
  defaultLogger.warn(message);
};

export const error = (message) => {
  defaultLogger.error(message);
  errorLogger.error(message);
};

这里添加了 error 参数: const errorLogger = log4js.getLogger('error');

然后我们在 error 方法中也添加了 errorLogger.error(message); 来输出单独错误日志文件。因为有了日志工具类,所以在使用的地方我们完全无需更改,如果你还想要其他输出,比如 sql 输出为单独一个文件,只要更改 配置文件,和 工具类即可。

Gitee源码查看

相关文章:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值