Log4js - Appenders
Appender 将日志事件序列化为某种形式的输出。他们可以写文件,发送电子邮件,通过网络发送数据。 所有的 appender 都有一个type
,用于确定日志的输出方式。
例如:
const log4js = require("log4js");
log4js.configure({
appenders: {
out: { type: "stdout" },
app: { type: "file", filename: "application.log" }
},
categories: {
default: { appenders: ["out", "app"], level: "debug" }
}
});
这定义了两个名为out
和app
的 appender。 out
使用写入标准输出的stdout的 appender。app
使用配置为写入application.log
文件的 appender。
核心 Appenders
log4js 包含以下 appender。有些需要额外的依赖,这些依赖关系未包含在 log4js 中(例如smtp的 appender 需要nodemailer),这些将在该 appender 的文档中指出。如果不使用这些 appender,则不需要额外的依赖项。
- categoryFilter
- console
- dateFile
- file
- fileSync
- logLevelFilter
- multiFile
- multiprocess
- recording
- stderr
- stdout
- tcp
- tcp-server
可选 Appenders
log4js 支持以下 appender,但从 v3 版本开始不再与 log4js 核心一起分发。
- gelf
- hipchat
- logFaces-HTTP
- logFaces-UDP
- loggly
- logstashHTTP
- logstashUDP
- mailgun
- rabbitmq
- redis
- slack
- smtp
例如,如果您以前使用过 gelf 的 appender(type:'gelf'
),则应在依赖项中添加@log4js-node/gelf
并将类型更改为type: '@log4js-node/gelf'
。
其他 Appenders
Log4js 可以从核心 appender 外部加载 appender。如果找不到匹配的 appender,则将type
配置值用作 require 路径。
例如,以下配置将尝试从模块'cheese/appender'中加载 appender,并将该 appender 的其余配置传递给该模块:
log4js.configure({
appenders: { gouda: { type: "cheese/appender", flavour: "tasty" } },
categories: { default: { appenders: ["gouda"], level: "debug" } }
});
log4js 根据类型值检查以下位置(按此顺序)是否有 appender:
- 核心 appenders:
require('./appenders/' + type)
- node_modules:
require(type)
- 相对于应用程序的主文件:
require(path.dirname(require.main.filename) + '/' + type)
- 相对于进程的当前工作目录:
require(process.cwd() + '/' + type)
如果要编写自己的 appender,请先阅读文档。
高级配置
如果您有自己的自定义 appender 或者正在使用 webpack(或其他捆绑程序),您可能会发现更容易通过在配置的 appender 模块中,而不是从 node.js 加载 require 路径。
这里有一个例子:
const myAppenderModule = {
configure: (config, layouts, findAppender, levels) => {
/* ...你的appender配置... */
}
};
log4js.configure({
appenders: { custom: { type: myAppenderModule } },
categories: { default: { appenders: ["custom"], level: "debug" } }
});