日志遵循PSR-3规范,除非是实时写入的日志,其它日志都是在当前请求结束的时候统一写入的 所以不要在日志写入之后使用exit等中断操作会导致日志写入失败。
一.写入日志的几种方法
1.助手函数 trace
/** * 记录日志信息 * @param mixed$log log信息 支持字符串和数组 * @param string $level 日志级别(error/info/notice) * @return array|void */trace($log, $level); // 用法
Notice:文件路径 访问的哪个模块下+log+月份+日期.log。
例如:
url: http://localhost/home/log/index
文件地址:/runtime/home/log/202208/24.log
2.Log 类
俩种方法,都是系统在运行结束后自动调用Log::save() 统一进行日志信息写入
方法 | 描述 |
use think\facade\Log; | |
Log::record($msg, $level) | 记录日志信息到内存,日志级别level 不写。默认info |
Log::write($msg, $level) | 实时写入一条日志信息 |
不同日志警告级别的方法: | |
Log::error('错误信息'); | error |
Log::info('日志信息'); | info |
二.如何将需要记录的日志单独记录到一个日志中
有时候需要将具体情况的日志统一记录到单一的类目中方便查看。比如支付日志,回调日志。可以使用通道解决方法。
1.日志通道channel
将配置不同的日志通道,将不同的日志记录到不同的日志中
使用方法:
Log::channel('pay')->info('支付日志');
配置日志文件config/log.php,加入不同的配置:
return [// 默认日志记录通道'default'=> env('log.channel', 'file'),// 日志记录级别'level'=> [],// 日志类型记录的通道 ['error'=>'email',...]'type_channel' => [],// 关闭全局日志写入'close'=> false,// 全局日志处理 支持闭包'processor'=> null,// 日志通道列表'channels' => ['file' => [// 日志记录方式'type' => 'File',// 日志保存目录'path' => '',// 单文件日志写入'single' => false,// 独立日志级别'apart_level'=> [],// 最大日志文件数量'max_files'=> 0,// 使用JSON格式记录'json' => false,// 日志处理'processor'=> null,// 关闭通道日志写入'close'=> false,// 日志输出格式化'format' => '[%s][%s] %s',// 是否实时写入'realtime_write' => false,],// 其它日志通道配置'pay' => ['type' => 'File','path' => app()->getRootPath().'runtime/pay', // 重点这个路径要写'time_format' => 'Y-m-d H:i:s','format' => '[%s][%s]:%s']],];
三.额外补充
1.日志时间格式化
'time_format' =>'Y-m-d H:i:s',
四.联想到的东西
1.依赖注入
Facade 门面设计模式,为容器提交了一种静态调用的方法。静态调用非静态方法。让调用日志只要Log::write()
container 容器类为 facade提供支持