日志对于 Web 开发的重要性毋庸置疑,它对于监控应用的运行状态、问题排查等都有非常重要的意义。
框架内置了强大的企业级日志支持,由 egg-logger 模块提供。

自定义日志

  1. // 自定义日志
  2. config.customLogger = {
  3. payLog: {
  4. file: path.join('./pay.json'),
  5. },
  6. // 自定义日志名称
  7. scheduleLogger: {
  8. // 日志级别
  9. level: 'INFO',
  10. // 自定义日志路径
  11. file: path.join('./schedule.json'),
  12. },
  13. requestLog: {
  14. level: 'INFO',
  15. file: path.join('./requestLog.json'),
  16. },
  17. responseLog: {
  18. level: 'INFO',
  19. file: path.join('./responseLog.json'),
  20. },
  21. };

自定义日志 输出格式 输出编码

  1. // 自定义日志路径
  2. config.logger = {
  3. // 默认编码为 utf-8,可通过如下方式覆盖 以下设置成gbk:
  4. encoding: 'utf-8',
  5. // 设置输出格式为JSON,方便日志监控系统分析
  6. outputJSON: true,
  7. // 定义日志路径
  8. dir: path.join('./logs/', appInfo.name),
  9. // 应用相关日志,供应用开发者使用的日志。我们在绝大数情况下都在使用它。
  10. appLogName: 'app-log.json',
  11. // 框架内核、插件日志
  12. coreLogName: 'core-log.json',
  13. // 进程日志,框架和使用到 agent 进程执行任务的插件会打印一些日志到这里。
  14. agentLogName: 'agent-log.json',
  15. // 实际一般不会直接使用它,任何 logger 的 .error() 调用输出的日志都会重定向到这里,重点通过查看此日志定位异常。
  16. errorLogName: 'error-log.json',
  17. // 打印所有级别日志到文件中 关闭所有打印到文件的日志
  18. level: 'DEBUG',
  19. // level: 'NONE',
  20. // 终端日志级别
  21. consoleLevel: 'DEBUG',
  22. // 日志格式
  23. contextFormatter(meta) {
  24. return [
  25. meta.date,
  26. meta.message,
  27. ].join('[]');
  28. },
  29. // 日志格式
  30. formatter() {
  31. // 返回 console.log(`[${meta.date}] [${meta.ctx} ${meta.ctx}] ${meta.message}`);
  32. return;
  33. },
  34. };

日志切割

  1. // 日志切割 我们也可以按照文件大小进行切割。例如,当文件超过 2G 时进行切割。默认按照天来切割
  2. config.logrotator = {
  3. // filesRotateBySize: [
  4. // path.join(appInfo.root, 'logs', appInfo.name, 'egg-web.log'),
  5. // ],
  6. // maxFileSize: 2 * 1024 * 1024 * 1024,
  7. };