log4js 是一个 nodejs 日志管理工具,可以将日志以各种形式输出到各种渠道。
- stdout 或 stderr 彩色控制台记录
- File Appender,可根据文件大小或日期配置日志滚动
- File Appender
- GELF appender
- Loggly appender
- Logstash UDP appender
- logFaces (UDP and HTTP)appender
- multiprocess appender (当你有多个服务器但想要集中日志记录时非常有用)
- Connect / Express Logger 日志程序
- 可配置的日志消息 layout/patterns
- 不同日志类别的不同日志级别(将应用程序的某些部分作为调试,其他部分仅作为错误,等等)。
- 内置的支持,可以使用 node core cluster 模块进行日志记录。
npm install log4js
var log4js = require('log4js'); var logger = log4js.getLogger(); logger.level = 'debug'; // default level is OFF - which means no logs at all. logger.debug("Some debug messages");
API
configuration
log4js.configure(object || string)
:配置 log4js。
- string:加载配置的文件名。配置文件必须是 JSON 文件,并包含一个配置对象(参见下面的格式)。
- object:直接传递一个configuration对象
在应用程序中首次 require('log4js')
之后,应该立即进行配置。如果不调用 configure,log4js 将使用 LOG4JS_CONFIG (如果已定义)或默认配置。默认的配置定义了一个 appender,使用带颜色的布局将日志记录到 stdout,但也定义了默认日志级别是关闭的(即不会输出日志)。
如果您使用的是 cluster,那么在工作进程及主进程中都会调用 configure。工作进程将会为您的类别选择正确的级别,以及选择您定义的任何自定义级别。Appenders 只会在主进程被定义。因此,不存在多个进程试图写入同一个 appender 的危险。不需要特殊的配置来使用带有 cluster 的 Log4js (与以前的版本不同)。
configuration 对象必须定义至少一个 appender 和一个默认类别。如果配置无效,Log4js 将抛出异常。
configure 方法调用返回已配置的 Log4js 对象。
Configuration 瀵硅薄
Properties:
levels (可选, object)
: 用于定义定制日志级别,或重新定义现有日志级别。是一个map
,key
是级别名level name(string, 不区分大小写)
,value
是一个object
对象。object
对象有两个属性:level value
级别(整数)以及colour
颜色。- 日志级别用于分配日志消息的重要性,使用整数值来对其进行排序。如果您没有在配置中指定任何内容,则使用默认值:
- ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < MARK < OFF(OFF是用来关闭日志记录的,不是日志记录的一个级别。如果使用了 OFF,则不需要调用
logger.off('some log message')
来关闭日志。)
- ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < MARK < OFF(OFF是用来关闭日志记录的,不是日志记录的一个级别。如果使用了 OFF,则不需要调用
- 这里定义的级别除了默认级别外,还可以用整数值来确定它们与默认级别的关系。
- 如果您定义的级别与默认级别相同,那么 config 中的整数值是优先级更高的。
- 级别的名称必须以字母开头,并且只能包含字母、数字和下划线。
appenders (object)
:将命名 appender(string)映射到 appender definitions (object)的 map。appender definitions 必须有一个属性 type(string),其他属性依赖于 appender type。categories (object)
:将命名 categories (string)映射到 category definitions(object)。你需要定义默认类别 category 用于所有与特定类别不匹配的日志事件。- 类别定义 category definitions 有两个属性:
appenders (array of strings)
:在这个 category 类别中使用的 appender 名称列表。一个 category 类别中至少要有一个 appenderlevel (string, 不区分大小写)
:这个 category 类别将给 appender 发送最小的日志级别。例如:如果设置成“error”
,那么 appender 将只会收到级别为‘error’, ‘fatal’, ‘mark’
的日志事件,日志事件为‘info’, ‘warn’, ‘debug’, ‘trace’
的将会被忽略。
- 类别定义 category definitions 有两个属性:
pm2 (可选, boolean)
:- 若您的 app 使用了
pm2
,则这里必须设置为true
,否则日志将不会工作(另外您还得下载pm2-intercom
作为pm2
模块:pm2 install pm2-intercom
)
- 若您的 app 使用了
pm2InstanceVar (string, 可选) (默认 ‘NODE_APP_INSTANCE’)
:如果您使用pm2
并更改了默认名称,则这里必须要设置。disableClustering (boolean, 可选)
:true
:使用的 log4js 忽略集群环境(clustered environments)或者你在pm2
日志中遇到了麻烦。每一个工作进程都将进行自己的日志记录。请小心使用这里如果你要把日志记录输出到文件。
Loggers
log4js.getLogger([category])
:
- 此函数接受一个可选的字符串参数,以表示要在这个记录器上使用日志事件的类别。如果没有指定类别,则事件将被路由到默认类别的 appender 上。
- 返回一个 Logger 对象,它的级别设置为 config 中指定的级别,并实现下列功能:
<level>(args...)
:可以是任何级别的小写名称(包括定义的任何定制级别)。例如:logger.info('some info')
将用信息级别发送一个日志事件。如果您使用的是基本的、彩色的或通过布局传递的消息,那么日志字符串将会委托给util.format
来定义格式(占位符,如%s、%d等)。is<level>Enabled()
:如果一个level
(驼峰命名) 级别的日志事件将被发送到为 logger 类别定义的 appender 上,则返回true。例如:logger.isInfoEnabled()
将返回true
如果事件的级别是INFO
或者低于INFO
。addContext(<key>,<value>)
:<key>
是一个字符串,<value>
可以是任意类型。这会存储一个键-值对,它被会添加到 appender 生成的所有日志事件中。- 用途:通过您的应用程序添加用于跟踪用户的 id。目前,只有
logFaces appender
才会使用上下文值。
- 用途:通过您的应用程序添加用于跟踪用户的 id。目前,只有
removeContext(<key>)
:从上下文删除先前定义的键值对。clearContext()
:从 appender 中删除所有上下文对。
Logger 瀵硅薄
Properties:
level
:log4js 级别或一个与级别(‘info’, ‘INFO’
)匹配的字符串。允许覆盖这个日志的配置级别。改变这个值适用于同一类别的所有日志记录。
Shutdown
log4js.shutdown(cb)
:
接受一个回调,当 log4js 关闭所有 appender 并完成写日志事件时,它将被调用。当您的程序退出时,请使用此函数来确保所有的日志都被写入文件,套接字被关闭,等等。
Custom Layouts
log4js.addLayout(type, fn)
:添加用户定义的布局函数。更多详情
文章来源: log4js 介绍及中文 API