贝利信息

yii log系统细吗_说yii日志记录分级与存储法【日志】

日期:2026-01-13 00:00 / 作者:看不見的法師
Yii日志需严格匹配配置规则:YII_DEBUG与traceLevel控制trace/debug;info/warning/error需目标显式启用levels;profile需手动加入levels;文件路径须用别名且有写权限;日志在请求结束时批量刷新,开发宜设flushInterval=1。

Yii 日志系统非常细,分级清晰、存储灵活,但“细”也意味着配置稍有偏差就可能日志不写、写错位置或漏级别——不是它不工作,而是你没对上它的规则。

日志级别怎么分?不是“越全越好”

traceinfowarningerrorprofile 这五类是核心,但它们的触发和可见性高度依赖两个前提:YII_DEBUG 状态 + traceLevel 配置。

文件存储路径和轮转怎么配才不踩坑?

默认日志路径是 @runtime/logs/app.log,但很多人改了 logFile 却发现日志没生成——常见原因是路径权限不足或别名未解析成功。

为什么写了

Yii::error()
却看不到日志?

这不是代码问题,是日志消息压根没“发出去”——Logger 把日志暂存在内存队列,等请求结束才批量刷新到目标。如果请求中途崩溃(如 fatal error)、或没走完 Yii 生命周期(如 console 命令里忘了 Yii::$app->end()),日志就丢了。

多个存储目标怎么共存又不打架?

一个 log 组件下可配多个 targets,它们是并行处理的,不是互斥的。比如你可以同时让 error 级别既写文件、又发邮件、还推到数据库,只要每个目标的 levelscategories 规则匹配上即可。

最常被忽略的一点:日志不是“写完就完”,而是“写对了才算”。categories 写错一个字符、levels 拼错大小写('Error''error')、@runtime 目录不可写——这些细节一出错,日志就静默失效,连报错都不会有。