node 日志管理log4js

214 阅读2分钟
示例

log目录文件如下,一个config配置文件,一个主文件

image.png

以下为config.js文件内容

const path = require('path')

//日志根目录
const baseLogPath = path.resolve(__dirname, '../logs')

// 错误输出日志
// 错误日志目录、文件名、路径
const errorPath = '/error'
const errorFileName = 'error'
const errorLogPath = baseLogPath + errorPath + '/' + errorFileName

// 配置日志格式
const appenders = {
    'rule-console': { 'type': 'console' },
    'errorLogger': {
        type: 'dateFile', // 日志类型
        filename: errorLogPath, // 输出文件名
        pattern: '-yyyy-MM-dd.log', // 文件后缀
        alwaysIncludePattern: true, //
        encoding: 'utf-8', // 编码格式
        maxLogSize: 1024 * 1024 * 1, // 每个文件最大存储内容
        numBackups: 2, // 备份文件的数量,主文件 + 备份 共3个文件,
        path: errorPath
    }
}

// 供外部调用的名称 和 对应设置定义
const categories = {
    default: { appenders: ['rule-console'], level: 'all' },
    errorLogger: { appenders: ['errorLogger'], level: 'error' }
}

module.exports = {
    appenders,
    categories,
    baseLogPath,
    disableClustering: true
}

以下为index.js的内容

const log4js = require('log4js')
const logConfig = require('./config')
// 调用预先定义的日志名称
const consoleLogger = log4js.getLogger()
const errorLogger = log4js.getLogger('errorLogger')
// 加载配置文件
log4js.configure(logConfig)

/**
 * 普通日志
 */
const info = function (info) {
    var logText = new String()
    //响应日志头信息
    logText += '\n' + '***************info log start ***************' + '\n'
    //响应内容
    logText += 'info detail: ' + '\n' + JSON.stringify(info) + '\n'
    //响应日志结束信息
    logText += '*************** info log end ***************' + '\n'
    return logText
}

/**
 * 错误日志
 */
const error = function (err, resTime) {
    var logText = new String()
    //错误信息开始
    logText += '\n' + '*************** error log start ***************' + '\n'
    //添加请求日志
    // 错误名称
    logText += 'err name: ' + err.name + '\n'
    // 错误信息
    logText += 'err message: ' + err.message + '\n'
    // logText += "err message: " + err + "\n";
    //错误详情
    logText += 'err stack: ' + err.stack + '\n'
    //错误信息结束
    logText += '*************** error log end ***************' + '\n'
    return logText
}

module.exports = {
    //封装普通日志
    logInfo: function (info) {
        if (info) {
            consoleLogger.info(info(info))
        }
    },
    //封装错误日志
    logError: function (error, resTime) {
        // console.log(error)
        // console.log(resTime)
        if (error) {
            errorLogger.error(error(error, resTime))
        }
    }
}
appenders属性
type
  • type: console 输出在控制台,往往用于调试
  • type: file 日志输出为普通文件
  • type: dateFile 按时间区分的日志文件
filename

D:\koa2/config/logs/error/error 路径 加 文件名称,代表输出文件名

pattern

pattern: '-yyyy-MM-dd.log' yyyy(年)、yy(年后两位)、MM(月份)、dd(天)、hh(小时)、mm(分)、ss(秒) 精确到天,就是每天一个文件;精确到小时,就是每小时一个文件;精确到分,就是每分钟一个文件。 默认是精确到天

alwaysIncludePattern

alwaysIncludePattern: true 默认开启 开启的情况下,filename 带有 pattern的后缀,也就是将两者合并到一起:handle.-2022-08-05.log 不开启则是handle.log,无时间后缀,也不会分文件

encoding

encoding: utf-8 编码格式

maxLogSize

maxLogSize: 1024 * 1024 * 1 文件的最大存储,单位byte,上面表示的是1M

numBackups

numBackups: 3 备份文件的数量,达到最大值,最新的会覆盖旧数据

daysToKeep

daysToKeep: 10 时间文件 保存多少天,以前的log将被删除