Yii2自定义日志前缀
在 Yii2 中,log
组件使用了不同的 log target
(如 file
, db
等)来记录日志。每个日志条目可以设置一个 prefix
,用于区分不同的日志信息来源。
增加 prefix
的方法
可以通过配置文件或者自定义类来全局设置日志的 prefix
。
方法一:通过配置文件设置 prefix
你可以在 config/web.php
或 config/main.php
中配置 log
组件的 targets
部分,添加的 prefix
。
1. 修改配置文件 config/web.php
或 config/main.php
:
return [
'components' => [
'log' => [
'targets' => [
[
'class' => 'yii\log\FileTarget',
'logFile' => '@runtime/logs/app.log',
'levels' => ['error', 'warning'],
'prefix' => function ($message) {
// 设置自定义的全局 prefix
return '[GlobalPrefix] ' . Yii::$app->id . ' ';
},
],
],
],
],
];
在上面的配置中,prefix
是一个匿名函数,返回你想要的 prefix
。可以使用 Yii2 的各种信息(如 Yii::$app->id
, Yii::$app->user->id
等)来定制这个 prefix
。
2. 日志输出的格式:
这会在日志文件的每一条记录前面加上 [GlobalPrefix] 应用ID
,从而实现全局 prefix
的效果。
方法二:通过自定义日志目标类增加 prefix
如果你需要在多个日志目标中使用相同的全局 prefix
,可以通过继承 yii\log\Target
来创建一个自定义的日志目标类。
1. 创建自定义的日志目标类
首先,创建一个继承自 yii\log\FileTarget
或其他日志目标的类,并重写 getMessagePrefix()
方法:
namespace app\components;
use yii\log\FileTarget;
class CustomLogTarget extends FileTarget
{
// 重写 getMessagePrefix() 方法,设置全局前缀
public function getMessagePrefix($message)
{
// 这里可以自定义 prefix 内容
return '[GlobalPrefix] ' . Yii::$app->id . ' ';
}
}
2. 修改配置文件使用自定义日志目标
在 config/web.php
或 config/main.php
中配置日志组件,使用你自定义的 CustomLogTarget
:
return [
'components' => [
'log' => [
'targets' => [
[
'class' => 'app\components\CustomLogTarget',
'logFile' => '@runtime/logs/custom_app.log',
'levels' => ['error', 'warning'],
],
],
],
],
];
3. 日志输出的格式:
这样所有使用 CustomLogTarget
的日志目标都会包含自定义的全局 prefix
,而不需要为每一个目标单独设置。
总结
- 方法一:通过在配置文件中为每个
log target
手动设置prefix
,适合简单的场景。 - 方法二:通过继承日志目标类重写
getMessagePrefix()
方法,适合需要大量使用相同prefix
或需要复用逻辑的场景。