log4js日志管理

配置对象
属性:


级别(可选,对象)-用于定义自定义日志级别,或重新定义现有日志级别;这是一个具有级别名称的映射(字符串、大小写不敏感)和一个对象作为值。对象应该有两个属性:level value (integer)作为值,以及颜色。日志级别被用来分配重要的日志消息,用整数值来排序它们。如果你不指定任何在你的配置中,使用默认值(所有<跟踪<调试<信息< < <致命错误<马克警告<——注意,是打算用来关闭日志,而不是实际的日志级别,即你永远不会叫记录器。(“一些日志消息”)。这里定义的级别用于添加默认级别,使用整数值来确定它们与默认级别的关系。如果定义与默认级别相同的级别,则配置中的整数值优先。级别名称必须以字母开头,并且只能包含字母、数字和下划线。
appender(对象)-一个命名的appender(字符串)映射到appender定义(对象);appender定义必须具有属性类型(string)—其他属性依赖于appender类型。
类别(对象)-类别定义(对象)的命名类别(字符串)映射。您必须定义用于所有不匹配特定类别的日志事件的默认类别。类别定义有两个属性:
appender(字符串数组)—用于此类别的appender名称列表。一个类别必须至少有一个appender。
级别(字符串,大小写不敏感)-这个类别将发送给appenders的最小日志级别。例如,如果设置为“error”,那么appenders只会收到级别“错误”、“致命”、“标记”——日志事件“info”、“警告”、“debug”或“trace”的日志事件。
pm2(布尔型)(可选)——如果你使用pm2运行你的应用程序,将其设置为true,否则日志将不起作用(你还需要安装pm2-intercom作为pm2模块:pm2安装pm2-intercom)
pm2InstanceVar (string)(可选,默认为' NODE_APP_INSTANCE ')——如果您使用的是pm2,并且更改了NODE_APP_INSTANCE变量的默认名称,那么就设置这个。
禁用(boolean)(可选)——如果您喜欢log4js用于忽略集群环境的方法,或者您在PM2日志记录中遇到麻烦,那么将其设置为true。每个worker进程都将执行自己的日志记录。如果你要记录文件,一定要小心,可能会出现奇怪的情况。
伐木工log4js.getLogger([类别])
该函数接受单个可选字符串参数,以表示该日志记录器上的日志事件所使用的类别。如果没有指定类别,事件将被路由到appender,以获得默认类别。函数返回一个Logger对象,该对象的级别设置为配置中指定的级别,并实现以下功能:


<level>(args…)-在其中<level>可以是任何级别的小写名称(包括定义的任何自定义级别)。例如:logger.info('some info')将用一个信息级别发送一个日志事件。如果您使用的是基本的、彩色的或消息传递的布局,那么被记录的字符串将会有它的格式(占位符,比如%s, %d,等等),并将其委托给util.format。
<level>Enabled() -返回true,如果一个级别的日志事件(camel case)将被分派到为logger类别定义的appender中。例如:“logger. isinfoenabled()”将返回true,如果记录器的级别为INFO或更低。
addContext(<key>,<value>) - <key>是一个字符串,<value>可以是任何东西。这将存储一个键值对,它被添加到日志记录器生成的所有日志事件中。使用的方法是添加ids,以便通过应用程序跟踪用户。目前,只有logFaces appenders才会使用上下文值。
removeContext(<key>) -从上下文删除先前定义的键值对。
clearContext()—从日志记录器中删除所有上下文对。日志记录器对象具有以下属性:

级别-级别为log4js级别或匹配级别的字符串(如“info”、“info”等)。这允许重写这个日志记录器的配置级别。更改此值适用于同一类别的所有记录器。



配置文件

const log4js = require('log4js')
 
log4js.configure({
    replaceConsole: true,
    appenders: {
        stdout: {//控制台输出
            type: 'stdout'
        },
        req: {//请求日志
            type: 'dateFile',
            filename: 'logs/reqlog/',
            pattern: 'req-yyyy-MM-dd.log',
            alwaysIncludePattern: true
        },
        err: {//错误日志
            type: 'dateFile',
            filename: 'logs/errlog/',
            pattern: 'err-yyyy-MM-dd.log',
            alwaysIncludePattern: true
        },
        oth: {//其他日志
            type: 'dateFile',
            filename: 'logs/othlog/',
            pattern: 'oth-yyyy-MM-dd.log',
            alwaysIncludePattern: true
        }
    },
    categories: {
        default: { appenders: ['stdout', 'req'], level: 'debug' },//appenders:采用的appender,取appenders项,level:设置级别
        err: { appenders: ['stdout', 'err'], level: 'error' },
        oth: { appenders: ['stdout', 'oth'], level: 'info' }
    }
})
 
 
exports.getLogger = function (name) {//name取categories项
    return log4js.getLogger(name || 'default')
}
 
exports.useLogger = function (app, logger) {//用来与express结合
    app.use(log4js.connectLogger(logger || log4js.getLogger('default'), {
        format: '[:remote-addr :method :url :status :response-timems][:referrer HTTP/:http-version :user-agent]'//自定义输出格式
    }))
}


express/app.js

var express = require('express');

const log4js= require('./utils/log-config')
const logger = log4js.getLogger()//根据需要获取logger


var app = express();

log4js.useLogger(app,logger2)  // 把每次请求的信息写入日志

express/controller.indexController.js


const log4js= require('../utils/log-config')
const logger = log4js.getLogger()//根据需要获取logger
const errlogger = log4js.getLogger('err')
const othlogger = log4js.getLogger('oth')


exports.index = (req, res) => {
  logger.info('地址信息', req.url)
  if(req.query.tom) {
    errlogger.error('出错了, 没有姓名', req.query)
    othlogger.info('其他日志信息')
  }


oth-2018-04-02.log

[ 2018-04-02T13:39:04.835] [INFO] oth - 其他日志信息



req-2018-04-02.log

[ 2018-04-02T13:39:04.832] [INFO] default - 地址信息 /
[ 2018-04-02T13:39:04.845] [INFO] default - [::ffff: 127. 0. 0. 1 GET / 200 20ms][ HTTP /1.1 Mozilla /5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit /537.36 (KHTML, like Gecko) Chrome /65.0.3325.181 Safari /537.36]
[ 2018-04-02T13:39:04.864] [INFO] default - [::ffff: 127. 0. 0. 1 GET /stylesheets/style.css 200 7ms][ https://127.0.0.1:3000/ HTTP /1.1 Mozilla /5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit /537.36 (KHTML, like Gecko) Chrome /65.0.3325.181 Safari /537.36]



err-2018-04-02.log

[ 2018-04-02T13:39:04.834] [ERROR] err - 出错了 {}


添加一个日志输出

log4js.configure({
    replaceConsole: true,
    pm2: true,
    appenders: {
        ...
        wx: {//微信推送
          type: 'dateFile',
          filename: 'logs/wxlog/',
          pattern: 'oth-yyyy-MM-dd.log',
          alwaysIncludePattern: true
      },
    },
    categories: {
        default: { appenders: ['stdout', 'req'], level: 'debug' },//appenders:采用的appender,取appenders项,level:设置级别
        err: { appenders: ['stdout', 'err'], level: 'error' },
        oth: { appenders: ['stdout', 'oth'], level: 'info' },
        wx: { appenders: ['stdout', 'wx'], level: 'info' }
    }
})

使用日志

const wxlogger = log4js.getLogger('wx')

wxlogger.info('java传过来的数据是', req.url)

[ 2018-04-02T13:56:49.883] [INFO] wx - java传过来的数据是 /?openId=kdjfhruiejf9837ry4u4j&name=tom&addr=beijing












  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值