配置对象
属性:
级别(可选,对象)-用于定义自定义日志级别,或重新定义现有日志级别;这是一个具有级别名称的映射(字符串、大小写不敏感)和一个对象作为值。对象应该有两个属性: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()—从日志记录器中删除所有上下文对。日志记录器对象具有以下属性:
属性:
级别(可选,对象)-用于定义自定义日志级别,或重新定义现有日志级别;这是一个具有级别名称的映射(字符串、大小写不敏感)和一个对象作为值。对象应该有两个属性: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