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或需要复用逻辑的场景。

浙公网安备 33010602011771号