日志

IMI 中的缓存,符合PSR-3规范。使用时需要先配置驱动和实例。

允许有多个同类型处理器实例,每个实例单独设置要处理的日志等级,非常灵活。

配置

控制台日志

  1. return [
  2. 'beans' => [
  3. 'Logger' => [
  4. 'exHandlers' => [
  5. [
  6. 'class' => \Imi\Log\Handler\File::class,
  7. 'options' => [
  8. /* 日志公共配置-开始 */
  9. // 允许记录的日志等级们
  10. 'levels' => \Imi\Log\LogLevel::ALL,
  11. // 日志缓存数量,当日志达到指定条数时,执行批量写入操作,减少对性能的影响,默认0,每次都写入
  12. // 'logCacheNumber' => 0,
  13. // 日志格式
  14. // 'format' => '{Y}-{m}-{d} {H}:{i}:{s} [{level}] {message}',
  15. // 调用跟踪格式
  16. // 'traceFormat' => '#{index} {call} called at [{file}:{line}]',
  17. /* 日志公共配置-结束 */
  18. /**
  19. * 要保存的文件名
  20. * 支持使用date()函数中所有的格式,如经典年月日:logs/{y}-{m}-{d}.log
  21. * 如果文件体积超出限制,会自动创建编号文件,如:第一个文件2018-01-01.log,第二个文件2018-01-01(1).log,第三个文件2018-01-01(2).log
  22. */
  23. 'fileName' => dirname(__DIR__, 3) . '/log.log',
  24. // 单文件最大体积,单位字节,默认1G
  25. // 'maxSize' => 1073741824,
  26. // trace日志精简(实验性功能)
  27. 'traceMinimum' => true,
  28. ],
  29. ]
  30. ],
  31. ],
  32. ]
  33. ];

文件日志

  1. return [
  2. 'beans' => [
  3. 'Logger' => [
  4. 'exHandlers' => [
  5. [
  6. 'class' => \Imi\Log\Handler\File::class,
  7. 'options' => [
  8. // 支持同上的公共配置
  9. /**
  10. * 要保存的文件名
  11. * 支持使用date()函数中所有的格式,如经典年月日:logs/{y}-{m}-{d}.log
  12. * 如果文件体积超出限制,会自动创建编号文件,如:第一个文件2018-01-01.log,第二个文件2018-01-01(1).log,第三个文件2018-01-01(2).log
  13. */
  14. 'fileName' => dirname(__DIR__, 3) . '/log.log',
  15. // 单文件最大体积,单位字节,默认1G
  16. // 'maxSize' => 1073741824,
  17. ],
  18. ]
  19. ],
  20. ],
  21. ]
  22. ];

框架默认日志处理

  1. return [
  2. 'beans' => [
  3. 'Logger' => [
  4. 'coreHandlers' => [
  5. // 这里配置,或者清空
  6. ],
  7. ],
  8. ]
  9. ];

配置中可选变量说明

首先,所有支持传入{xxx}形式的格式中,都支持date()函数支持的格式,如Y-m-d等。

format

message 日志消息level 日志等级timestamp 日志时间戳,精度:秒trace 代码调用跟踪

lastTraceFormat

参考debug_backtrace()函数返回字段。call 调用跟踪

traceFormat

call 调用跟踪index 顺序

使用

  1. use Imi\Log\Log;
  2. use Imi\Log\LogLevel;
  3. Log::log(LogLevel::INFO, '日志内容');
  4. // 第三个参数可选传入数据,也可代入上面的变量
  5. Log::log(LogLevel::INFO, '日志内容', []);
  6. // 第三个参数可选传入数据,也可代入上面的变量
  7. Log::emergency('日志内容', []);
  8. Log::alert('日志内容');
  9. Log::critical('日志内容');
  10. Log::error('日志内容');
  11. Log::warning('日志内容');
  12. Log::notice('日志内容');
  13. Log::info('日志内容');
  14. Log::debug('日志内容');

直接记录异常日志:

  1. try {
  2. throw new \RuntimeException('test');
  3. } catch(\Throwable $th) {
  4. App::getBean('ErrorLog')->onException($th);
  5. }