使用场景
- 问题排查
- 应用运行状态监控
日志特性
- 日志等级
- 统一错误日志
- 启动日志和运行日志分离
- 多进程日志
- 日志自动切割
- 日志高性能写入
- 日志扩展、自定义
日志操作
打印日志
应用日志: 和业务无关, 例如应用启动
app.logger.info()请求日志: 记录请求相关日志, 日志会带上请求相关信息
ctx.logger.info(‘ctx.logger’)
//2019-02-03 11:18:56,157 INFO 46536 [-/127.0.0.1/-/5ms GET /api/user] ctx.loggerthis.logger: 在controller、 service等实例中获取, 会带上日志文件路径,便于快速定位问题
this.logger.info(‘this.logger’);
//2019-02-03 11:18:56,158 INFO 46536 [-/127.0.0.1/-/5ms GET /api/user] [controller.user] this.logger日志等级
- NONE(默认不输出)、DEBUF –> logger.debug、INFO –> logger.info 、WARN —> looger.warn、ERROR —> looger.error
错误日志
ctx.logger.error(new Error(‘error’)); — > 存放路径common-error.log
日志输出方式
- 终端和日志同时会输出
- local 和 unittest 环境下为 baseDir,即项目源码的根目录。
- prod 和其他运行环境,都为 HOME,即用户目录,如 /home/admin。
框架内置日志标识
- ${appInfo.name}-web.log:应用输出的日志,通过上述的 ctx.logger 等打印。
- egg-web.log: 用于框架内核、插件日志,通过 app.coreLogger 打印。
- common-error.log:所有 Logger 的错误日志会统一汇集到该文件。
日志切割
按天切割
- 这是框架的默认日志切割方式,在每日 00:01 按照 .log.YYYY-MM-DD 文件名进行切割。
按文件大小切割
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15// config/config.default.js
const path = require('path');
module.exports = appInfo => {
const config = {};
config.logrotator = {
filesRotateBySize: [
'egg-web.log',
],
maxFileSize: 2 * 1024 * 1024 * 1024,
};
return config;
};