Yii2如何禁用“Session is already started”警告日志写入?
解决Yii框架中Session重复初始化警告日志的问题
我来帮你搞定这个问题!你之前的配置没生效是因为日志过滤的粒度不对,咱们来调整一下:
正确的日志过滤配置
你需要在except数组里指定精确的日志类别,也就是日志里显示的yii\web\Session::init,而不是只写类名。修改后的配置如下:
'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], 'except' => [ 'yii\web\Session::init', // 精确匹配这个警告的日志类别 ], ], ],
这样就能精准过滤掉这条重复的Session初始化警告了。
为什么之前的配置没生效?
Yii的日志系统中,每个日志条目都有一个对应的分类,这条警告的分类是yii\web\Session::init(对应Session类的init方法)。你之前只写了yii\web\Session,这个范围太宽泛,而且日志系统不会自动匹配类名下的所有方法日志,所以没法过滤掉这条特定的警告。
从根源解决问题(可选)
如果想彻底避免这条警告出现,而不是只过滤日志,你可以检查以下几点:
- 查看是否在代码中手动调用了
Session::init()方法,Yii的Session组件默认会自动初始化,手动调用会导致重复初始化。 - 检查应用配置中的
session组件是否设置了autoStart为true,同时又有其他地方触发了Session启动(比如控制器、过滤器里的代码)。可以将autoStart设为false,然后在需要使用Session的地方手动调用Yii::$app->session->open()。
内容的提问来源于stack exchange,提问作者Boolean_Type
相关产品推荐
相关产品推荐

