在线文档教程

日志 | 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, FileDateFile 类型都支持 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() { } }