日志 | Logger
Logger
ThinkJS 通过 think-logger3 模块实现了强大的日志功能,并提供适配器扩展,可以很方便的扩展内置的日志模块。系统默认使用 log4js 模块作为底层日志记录模块,具有日志分级、日志分割、多进程等丰富的特性。
基本使用
系统已经全局注入了 logger 对象 think.logger
,其提供了 debug
, info
, warn
, error
四种方法来输出日志,日志默认是输出至控制台中。
think.logger.debug('debug message'
think.logger.info('info message'
think.logger.warn('warning'
think.logger.error(new Error('error')
基本配置
系统默认自带了 Console
, File
, DateFile
三种适配器。默认是使用 Console
将日志输出到控制台中。
文件
如果想要将日志输出到文件,将以下内容追加到 src/config/adapter.js
文件中:
const path = require('path'
const {File} = require('think-logger3'
exports.logger = {
type: 'file',
file: {
handle: File,
backups: 10,
absolute: true,
maxLogSize: 50 * 1024, //50M
filename: path.join(think.ROOT_PATH, 'logs/xx.log')
}
}
该配置表示系统会将日志写入到 logs/xx.log
文件中。当该文件超过 maxLogSize
值时,会创建一个新的文件 logs/xx.log.1
。当日志文件数超过 backups
值时,旧的日志分块文件会被删除。文件类型目前支持如下参数:
filename
:日志文件地址
日期文件
如果想要将日志按照日期文件划分的话,将以下内容追加到 src/config/adapter.js
文件中:
const path = require('path'
const {DateFile} = require('think-logger3'
exports.logger = {
type: 'dateFile',
dateFile: {
handle: DateFile,
level: 'ALL',
absolute: true,
pattern: '-yyyy-MM-dd',
alwaysIncludePattern: false,
filename: path.join(think.ROOT_PATH, 'logs/xx.log')
}
}
该配置会将日志写入到 logs/xx.log
文件中。隔天,该文件会被重命名为 xx.log-2017-07-01
(时间以当前时间为准),然后会创建新的 logs/xx.log
文件。时间文件类型支持如下参数:
level
:日志等级
高级配置
如果以上配置都无法满足你的需求,你也可以直接提供 log4js 的配置。例如:
const path = require('path'
const {Basic} = require('think-logger3'
exports.logger = {
type: 'advanced',
advanced: {
handle: Basic,
appenders: {
everything: {
type: 'file',
filename: path.join(think.ROOT_PATH, 'logs/all-the-logs.log')
},
emergencies: {
type: 'file',
filename: path.join(think.ROOT_PATH, 'logs/oh-no-not-again.log')
},
'just-errors': {
type: 'logLevelFilter',
appender: 'emergencies',
level: 'error'
}
},
categories: {
default: {
appenders: ['just-errors', 'everything'],
level: 'debug'
}
}
}
};
该配置表示将 error
级别以上的日志输出到 oh-no-not-again.log
文件,同时还将所有的日志输出到all-the-logs.log
文件中。除了 handle
属性,所有的配置都和 log4js 的一样,你可以在 这里 查看详细的配置项。
另外需要注意的是,考虑到分类的用处比较少,我们不支持自定义日志分类,所以在 categories
中配置其它分类是无效的,但是默认分类需要存在。
注: 高级配置需要 think-logger3 >= 1.1.1。
Level
日志等级用来表示该日志的级别,目前支持如下级别:
- ALL
Layout
Console
, File
和 DateFile
类型都支持 layout
参数,表示输出日志的格式,值为对象,下面是一个简单的示例:
const path = require('path'
const {File} = require('think-logger3'
module.exports = {
type: 'file',
file: {
handle: File,
backups: 10,
absolute: true,
maxLogSize: 50 * 1024, //50M
filename: path.join(think.ROOT_PATH, 'logs/xx.log'),
layout: {
type: 'pattern',
pattern: '%[[%d] [%p]%] - %m',
}
}
}
默认的 Console
的输出格式是 %[[%d] [%z] [%p]%] - %m
,即 [时间] [进程ID] [日志等级] - 日志内容
。 目前 layout 支持如下参数:
type
:目前支持如下类型
自定义 handle
如果觉得提供的日志输出类型不满足大家的需求,可以自定义日志处理的 handle
。自定义 handle
需要实现以下几个方法:
module.exports = class {
/**
* @param {Object} config {} 配置传入的参数
*/
constructor(config) {
}
debug() {
}
info() {
}
warn() {
}
error() {
}
}