Yii2自定义日志前缀

news/2025/1/15 17:38:44/文章来源:https://www.cnblogs.com/tl542475736/p/18412150

在 Yii2 中,log 组件使用了不同的 log target(如 file, db 等)来记录日志。每个日志条目可以设置一个 prefix,用于区分不同的日志信息来源。

增加 prefix 的方法

可以通过配置文件或者自定义类来全局设置日志的 prefix

方法一:通过配置文件设置 prefix

你可以在 config/web.phpconfig/main.php 中配置 log 组件的 targets 部分,添加的 prefix

1. 修改配置文件 config/web.phpconfig/main.php

return ['components' => ['log' => ['targets' => [['class' => 'yii\log\FileTarget','logFile' => '@runtime/logs/app.log','levels' => ['error', 'warning'],'prefix' => function ($message) {// 设置自定义的全局 prefixreturn '[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.phpconfig/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 或需要复用逻辑的场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/796563.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录突击版刷题

704.二分查找 https://leetcode.cn/problems/binary-search/description/ 59.螺旋矩阵IIhttps://leetcode.cn/problems/spiral-matrix-ii/description/、 参考题解写出54.螺旋矩阵https://leetcode.cn/problems/spiral-matrix/description/class Solution { public:vector<i…

高精地图(HD map)的简单介绍

高精度语义地图的动态构建-HDMapNet - 知乎 (zhihu.com)

fastDFS - 单机部署 + nginx

准备查看操作系统的版本信息[root@lab10 ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)查看操作系统的网卡地址[root@lab10 ~]# ip address show ens32 2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group def…

python 获取163 邮箱的邮件信息

此案例是是获取的一个亚马逊的验证码 import time from imaplib import IMAP4_SSL import imaplib,email,datetime from lxml import etree from dateutil.parser import parsedef str_to_unicode(s, encoding=None):return str(s, encoding) if encoding else str(s)def get_x…

支付宝携手HarmonyOS SDK打造高效便捷的扫码支付体验

背景 在日常的购物转账、生活缴费等在线支付中,用户在正式拉起支付界面前,均需要至少经历一次"识别"+两次"寻找",即识别归属应用、寻找应用、寻找扫码入口,才能完成扫码、付款,每一步都带来不同程度的用户流失。如何将步骤繁琐的扫码支付做到最简化,…

基于Java+Springboot+Vue开发的鲜花商城管理系统

项目简介该项目是基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学…

基于Java+Springboot+Vue开发的体育用品商城管理系统

项目简介该项目是基于Java+Springboot+Vue开发的体育用品商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的体育用品商城管理系统项目,大学生可以在…

基于Java+Springboot+Vue开发的口腔牙科诊所预约管理系统

项目简介该项目是基于Java+Springboot+Vue开发的口腔牙科诊所预约管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的口腔预约管理系统项目,大学生可以在…

南沙C++信奥老师解一本通题: 1212:LETTERS

​题目描述】给出一个rowcol的大写字母矩阵,一开始的位置为左上角,你可以向上下左右四个方向移动,并且不能移向曾经经过的字母。问最多可以经过几个字母。【输入】第一行,输入字母矩阵行数R和列数S,1≤R,S≤20。 接着输出R行S列字母矩阵。【输出】最多能走过的不同字母的个…

ubuntu 采用.run文件安装的cuda,升级版本,安装cudnn

cuda下载 https://developer.nvidia.com/cuda-downloadscudnn下载 https://developer.nvidia.com/rdp/cudnn-archive关闭docker服务 sudo systemctl stop docker.socket sudo systemctl stop docker sudo systemctl stop docker.service卸载,采用nvidia-smi官方给的卸载方法:…