0

0

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

看不見的法師

看不見的法師

发布时间:2026-01-13 19:35:06

|

551人浏览过

|

来源于php中文网

原创

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

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

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

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

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

  • tracedebug(后者是 trace 的别名)只在 YII_DEBUG = truetraceLevel > 0 时才真正记录;否则调用 Yii::trace() 是静默丢弃的
  • infowarningerror 不受 YII_DEBUG 影响,但必须被目标(Target)显式列入 levels 数组才会落盘
  • profile 用于性能分析,需配合 Yii::beginProfile()/Yii::endProfile(),且目标要支持(如 FileTarget 默认不导出 profile,得手动加 'levels' => ['error', 'profile']

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

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

  • 务必用 Yii 别名(如 @runtime),不要硬写绝对路径;@runtime/logs/ 目录必须存在且 Web 进程有写权限
  • 按天分文件?别手写 date("Y-m-d") 在配置里——PHP 配置是单次加载,日期不会动态更新。正确做法是用 FileTarget 自带的 maxFiles + maxFileSize + rotateByCopy(默认开启)自动轮转
  • 想按模块隔离日志?靠 categories + 多个 FileTarget:比如用户操作走 user_action 分类,写进 @runtime/logs/user.log;支付模块走 payment.*,单独存 payment.log

为什么写了 Yii::error() 却看不到日志?

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

  • 开发调试时加 'flushInterval' => 1(每 1 条就刷一次),避免“以为写了,其实卡在内存里”
  • 确认 'bootstrap' => ['log'] 已配置——漏掉这句,log 组件根本不会提前加载,所有 Yii::xxx() 调用都无效
  • 检查目标是否启用:'enabled' => YII_ENV_DEV 这类条件写法很常见,但若环境变量没正确定义(比如用 php -S 启动却没设 YII_ENV_DEV=1),目标直接被跳过

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

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

  • 注意 exceptexcept 的优先级:它是在目标内过滤,不是全局开关。例如 'except' => ['yii\web\HttpException:404'] 只影响当前这个 FileTarget,不影响其他目标
  • 敏感信息别乱记:logVars 默认记录 $_GET$_POST 等,生产环境务必清空或严格限定,否则账号密码可能明文进日志
  • 异步写入?FileTarget 是同步阻塞的;高并发下大量 info 日志会拖慢响应。真要异步,得换 SyslogTarget 或自定义目标+消息队列,别硬扛
最常被忽略的一点:日志不是“写完就完”,而是“写对了才算”。categories 写错一个字符、levels 拼错大小写('Error''error')、@runtime 目录不可写——这些细节一出错,日志就静默失效,连报错都不会有。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2487

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1584

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1480

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

952

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1414

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1234

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1445

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1305

2023.11.13

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.6万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号