Yii 框架问题排查:无法打印日志,Yii::log() 方法无效

在Yii框架开发中遇到日志无法打印的问题,经过排查发现是由于配置文件中`'log'`组件被错误地注释掉导致。了解Yii日志原理,包括日志缓冲区、onFlush和onEndRequest事件,解决方法是取消对`'log'`组件的注释,使其能正常加载并记录日志。
摘要由CSDN通过智能技术生成

在开发过程中遇到非常奇怪的问题,Yii::log() 方法无效,即使发生异常时也没有任何日志输出。Yii 框架肯定不会有问题,根据经验一般问题都出现在目录权限或者框架配置上。

先说结论,这次问题在于配置文件中 'preload' => array('log'), 一行被他人错误的注释掉了,解开注释后日志打印恢复正常。

还有一种可能,当使用 tail -f application.log 查看日志时,若 application.log 文件刚好写满,也不会有日志滚动!退出重新执行 tail 以跟踪新的日志文件。


下面记录一下排查方法,顺便了解一下 Yii 框架日志记录原理:

首先说明大致原理:Yii 框架中日志在内存中有 “缓冲区” 的存在,就是说,并非每次 Yii::log() 执行都会向文件中写入。当缓冲区写入次数超过阈值、或者当一次请求完成时,从缓冲区中读取数据写入日志文件。

日志写入逻辑如下: Yii::log() => YiiBase::log() => (根据配置选择是否记录 Stack Trace)=> CLogger::log() => 写入缓冲区(CLogger::$_logs 数组)、判断写入次数阈值 => 不满足刷新条件,什么都不做;满足刷新条件,触发 onFlush 事件

onFlush 事件触发逻辑:CLogRouter::init() 注册 onFlush 处理器为 <

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值