日志配置


位置是:config\log.php

  1. <?php
  2. return [
  3. // 日志记录方式,内置 file socket 支持扩展
  4. 'type' => 'File',
  5. // 日志保存目录
  6. 'path' => '',
  7. // 日志记录级别
  8. 'level' => [],
  9. // 单文件日志写入
  10. 'single' => false,
  11. // 独立日志级别
  12. 'apart_level' => [],
  13. // 最大日志文件数量
  14. 'max_files' => 0,
  15. // 是否关闭日志写入
  16. 'close' => false,
  17. ];

可以为每个模块单独配置日志类型,需要在模块的配置目录下 log.php 中配置,一般不需要去改动


日志写入

手动记录

一般情况下,系统的日志记录是自动的,无需手动记录,但是某些时候也需要手动记录日志信息,Log类提供了3个方法用于记录日志。

方法 描述
record() 记录日志信息到内存
save() 把保存在内存中的日志信息(用指定的记录方式)写入,并清空内存中的日志
write() 实时写入一条日志信息,会触发save操作

V5.1.15+版本开始,write方法不会触发save操作

由于系统在请求结束后会自动调用Log::save方法,所以通常,你只需要调用Log::record记录日志信息即可。

例子:

  1. <?php
  2. namespace app\test2\controller;
  3. use think\Controller;
  4. use think\facade\Log;
  5. class Demo2 extends Controller
  6. {
  7. // 测试记录日志
  8. public function fun1()
  9. {
  10. Log::write('测试日志');
  11. }
  12. }

然后使用 postman 发送这个请求,再去查看记录的日志:默认情况下日志被记录在 runtime/log/ 文件夹下,按照日期会被自动管理。
image.png

默认的日志级别是 [info],我也可以手动设置.

  1. <?php
  2. // 可以设置日志的级别
  3. public function fun2()
  4. {
  5. Log::write('测试日志信息,这是警告级别,并且实时写入','notice');
  6. }

日志级别

日志的级别从低到高依次为:

  • debug:调试级别
  • info:默认级别
  • notice:提醒级别
  • warning:警告级别
  • error:错误级别
  • critical:临界的批评的关键的危急的
  • alert:
  • emergency:紧急情况
  • sql日志级别仅用于记录SQL日志(并且仅当开启数据库调试模式有效)。

系统提供了不同日志级别的快速记录方法,例如:

  1. <?php
  2. Log::error('错误信息');
  3. Log::info('日志信息');
  4. // 和下面的用法等效
  5. Log::record('错误信息','error');
  6. Log::record('日志信息','info');

还封装了一个助手函数用于日志记录,例如:

  1. <?php
  2. trace('错误信息','error');
  3. trace('日志信息','info');

事实上,你可以增加自定义的日志类型,例如:

  1. <?php
  2. Log::record('自定义错误信息','diy');
  3. trace('自定义错误信息','diy');

也支持指定级别日志的输入,需要配置信息:

  1. <?php
  2. return [
  3. 'type' => 'File',
  4. // 日志记录级别,使用数组表示
  5. 'level' => ['error','alert'],
  6. ],

上面的配置表示只记录erroralert级别的日志信息。

默认情况下是不会记录HTTP异常日志(避免受一些攻击的影响写入大量日志),除非你接管了系统的异常处理,重写了report方法。

上下文信息

独立日志

单文件日志

写入授权

清空日志

日志自动清理(V5.1.6+)

JSON格式日志(V5.1.15+)