日志遵循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提供支持