apart_level 是 ThinkPHP6 日志系统中用于按级别分离日志文件的配置项,值为小写字符串数组(如['info','error']),启用后对应级别日志将独立成文件(如29_info.log),仅对 type='File' 通道生效,且需 path 以/结尾、权限正确、不与 single=true 冲突。

apart_level 是 ThinkPHP6 日志系统中用于按日志级别自动分离文件的关键配置项,它让不同严重程度的日志(如 info、warning、error)各自写入独立的文件,便于排查和归档。
什么是 apart_level?
它是一个数组,定义哪些日志级别需要「单独成文件」。启用后,对应级别的日志不再混在主日志里,而是按日期+级别命名,例如:
runtime/log/202610/29_info.log runtime/log/202610/29_warning.log runtime/log/202610/29_error.log
注意:
apart_level只对type => 'File'的通道生效,且需配合正确的目录权限和路径格式。
怎么配置 apart_level?
在 config/log.php 的某个通道(比如默认的 file 通道)中添加:
'file' => [
'type' => 'File',
'path' => runtime_path() . 'log/',
'apart_level' => ['info', 'warning', 'error'],
'level' => ['info', 'notice', 'warning', 'error', 'critical'],
],
✅ 关键点:
-
apart_level值必须是小写字符串数组,如['info', 'warning'] - 不能写成
'info,warning'或['INFO','WARNING'],否则无效 - 它不影响日志是否记录,只控制「是否单独写文件」;是否记录由
level控制 - 日志仍会照常写入主日志(如
202610/29.log),除非你禁用single => true或调整逻辑
配合自定义通道使用(如 pay、sql)
若想让支付日志单独存为 pay/202610/29_info.log,可这样配:
'pay' => [
'type' => 'File',
'path' => runtime_path() . 'log/pay/', // 必须以 / 结尾
'apart_level' => ['info', 'error'],
'level' => ['info', 'error'],
'single' => false,
],
然后调用:
Log::channel('pay')->info('订单ID:10001 创建成功');
Log::channel('pay')->error('支付回调验签失败');
生成的文件就是:
runtime/log/pay/202610/29_info.logruntime/log/pay/202610/29_error.log
⚠️ 注意事项:
- 通道名必须全小写(
'pay'✅,'Pay'❌) -
path结尾必须有/,否则可能错写成pay_pay.log - PHP 进程用户(如
www-data)需对runtime/log/pay/目录有写权限,否则静默失败
和 level 的关系
-
level决定「哪些级别允许写入该通道」 -
apart_level是level的子集,决定其中哪些级别要「再拆成独立文件」 - 例如:
'level'=>['info','error']+'apart_level'=>['error']→info写进主日志,error单独成xxx_error.log
补充:常见失效原因
- 配置改了但没清缓存:执行
php think clear:log或删掉runtime/cache/ -
apart_level写在错误位置(应放在具体通道配置里,不是全局log数组顶层) - 使用了
single => true:此时所有日志强制写进一个文件,apart_level不起作用 - 没设置
path或路径不可写:日志根本不会生成,也不会报错
不复杂但容易忽略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











