YII2框架中日志的配置与使用方法实例分析

Yii2框架(一)安装及目录结构 如题:对,你要相信自己的眼睛,你没看错确实是Yii2框架。 现在都2020年了,刚刚开始折腾Yii2框架难免有些过时,但是没办法,公司目前的项目是基于Yii2开发的,嘿,你说怎么这么巧,我还没用过Yii2框架。 没办法,看手册呗。这玩意,万变不离其宗,总归还是PHP。 之前用的多的大概就是thinkphp,从3到5再到目前的6,也是这样一步步过来的。 Yii与thinkphp相比一定是有其独到的地方的。 稍老的框架的好处就是,官方文档的bug可能是少一点,开发过程中遇到的问题,面向百度的时候可能答案更多一点 阅读详情


YII2中给我们提供了非常方便的日志组件,只需要简单配置一下就可以使用。

我们在config/web.php中配置如下:

return [
    //log必须在bootstrap期间就被加载,便于及时调度日志消息到目标
    'bootstrap' => ['log'],

    'components' => [
        'log' => [
            //消息跟踪级别,设置yii\log\Dispatcher::traceLevel属性
            //YII_DEBUG开启时,日志消息被记录时,追加最多3个调用堆栈信息
            'traceLevel' => YII_DEBUG ? 3 : 0,
            //日志目标,可定义多个
            'targets' => [
                [
                    //日志处理器类
                    'class' => 'yii\log\FileTarget',
                    //日志记录的级别
                    'levels' => ['error', 'warning'],
                    //定义日志文件
                    'logFile' => '@runtime/logs/test.log',
                ],
            ],
        ],
    ],
];
通过下面5个方法,来写入我们自已的日志

//跟踪
Yii::trace('我是一条跟踪');
//消息
YII::info('我是一条消息');
//调试
YII::debug('我是一条调试');
//警告
YII::warning('我是一条警告');
//错误
YII::error('我是一条错误');


注意我们上面定义日志的levels为['error', 'warning'],所以日志只会记录这两个级别的信息。

有些时候我们并不希望把所有日志写在一起,我们会根据不同模块来写日志,这样以便区分,这就需要用到日志的分类了。

重新配置config/web.php如下:

'log' => [
    'traceLevel' => YII_DEBUG ? 3 : 0,
    'targets' => [
        [
            //日志处理器类,这里我改用数据库存日志了
            'class' => 'yii\log\DbTarget',
            //日志记录的级别
            'levels' => ['error', 'warning'],
            //追加上下文信息,默认YII会包含PHP全局变量,这里我们不需要,设为空。
            'logVars' => [],
            //定义分类
            'categories' => ['db'],
        ],
        [
            //日志处理器类,这里我改用数据库存日志了
            'class' => 'yii\log\DbTarget',
            //日志记录的级别
            'levels' => ['error', 'warning'],
            //追加上下文信息,默认YII会包含PHP全局变量,这里我们不需要,设为空。
            'logVars' => [],
            //定义分类
            'categories' => ['pay'],
        ],
    ],
],
通过如下方法,添加我们的日志

//警告
YII::warning('我是一条数据库警告', 'db');
//错误
YII::error('我是一条数据库错误', 'db');

//警告
YII::warning('我是一条支付警告', 'pay');
//错误
YII::error('我是一条支付错误', 'pay');
由于上面的配置我们使用了DbTarget,我们还需要添加一张日志表,用于记录我们的日志,进入项目目录。运行如下命令:

yii migrate --migrationPath=@yii/log/migrations


当然categories我们也可以指定为YII的类

'log' => [
    'traceLevel' => YII_DEBUG ? 3 : 0,
    'targets' => [
        [
            'class' => 'yii\log\FileTarget',
            'levels' => ['error', 'warning'],
        ],
        [
            //日志处理器类,这里我改用数据库存日志了
            'class' => 'yii\log\DbTarget',
            //日志记录的级别,这里演示设为info
            'levels' => ['info'],
            //定义分类
            'categories' => ['yii\db\*'],
        ],
    ],
],
然后我们操作一下数据库,看是否日志记录了。

<?php

namespace app\controllers;

use YII;
use yii\db\Query;
use yii\web\Controller;

class TestController extends Controller
{
  public function actionTest()
  {
    $data = (new Query())->from('{{%user}}')
      ->where('id=:id', [':id' => '1'])
      ->all();

    var_dump($data);
  }
}


日志消息的格式化,我们可以自定义日志的前缀。

'log' => [
    'traceLevel' => YII_DEBUG ? 3 : 0,
    'targets' => [
        [
            'class' => 'yii\log\FileTarget',
            'levels' => ['error', 'warning'],
        ],
        [
            //日志处理器类,这里我改用数据库存日志了
            'class' => 'yii\log\DbTarget',
            'levels' => ['error', 'warning'],
            //定义分类
            'categories' => ['db'],
            //定义前缀
            'prefix' => function($message) {
                $uid = !empty(YII::$app->user->id) ? YII::$app->user->id : '-';
                $mid = !empty(YII::$app->module->id) ? YII::$app->module->id : '-';
                $cid = !empty(YII::$app->controller->id) ? YII::$app->controller->id : '-';
                $aid = !empty(YII::$app->controller->action->id) ? YII::$app->controller->action->id : '-';
                return "[{$uid}][{$mid}/{$cid}/{$aid}]";
            },
        ],
    ],
],
使用如下代码,记录日志,查看效果

YII::warning('我是警告!!!', 'db');
YII::error('我是错误!!!', 'db');


由于没有登陆和分模块,所以没获取到用户ID和模块ID,不过控制器ID和方法ID都获取到了。

消息的刷新和导出

'log' => [
    'traceLevel' => YII_DEBUG ? 3 : 0,
    //消息被存放在一个数组里,积累到一定数量,才会被刷新到日志target
    //通过flushInterval设置消息刷新到日志target的数量
    'flushInterval' => 100,
    'targets' => [
        [
            'class' => 'yii\log\FileTarget',
            'levels' => ['error', 'warning'],
        ],
        [
            //日志处理器类,这里我改用数据库存日志了
            'class' => 'yii\log\DbTarget',
            //当消息刷新到日志对象时,并不会立即导出,只有累积到一定数量才会导出
            //通过exportInterval来设置这个导出数量
            'exportInterval' => 100,
            'levels' => ['error', 'warning'],
            //定义分类
            'categories' => ['db'],
        ],
    ],
],
有人会问YII2设置flushInterval和exportInterval的作用是什么,因为在一些系统中日志的操作会很频繁,如果频繁的读取文件或数据库来写日志,会造成严重的IO消耗,降低系统性能,这也是YII2的一个优化吧。

当然有些时候一些长时间在控制台运行的程序,需要立即显示日志,那么可以通过如下配置:

'log' => [
    'traceLevel' => YII_DEBUG ? 3 : 0,
    'flushInterval' => 1,
    'targets' => [
        [
            'class' => 'yii\log\FileTarget',
            'levels' => ['error', 'warning'],
        ],
        [
            'class' => 'yii\log\FileTarget',
            'exportInterval' => 1,
            'levels' => ['error', 'warning'],
            //定义分类
            'categories' => ['db'],
        ],
    ],
],
将flushInterval和exportInterval分别设为1。

有些时候我们需要人为的开启和关闭某些日志目标,这时就需要我们为每个日志目标设个键,以区分。

'log' => [
    'traceLevel' => YII_DEBUG ? 3 : 0,
    'targets' => [
        'pay' => [
            'class' => 'yii\log\DbTarget',
            'levels' => ['error', 'warning'],
            'categories' => ['pay'],
        ],
        'db' => [
            'class' => 'yii\log\DbTarget',
            'levels' => ['error', 'warning'],
            'categories' => ['db'],
        ],
    ],
],
然后通过如下,进行开启和关闭:

//关闭
Yii::$app->log->targets['db']->enabled = false;
//开启
Yii::$app->log->targets['db']->enabled = true;
更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
————————————————
版权声明:本文为优快云博主「大鹏的世界」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/adparking/article/details/109223040

【Yii框架 一 】PHP框架,Yii概述 PHP的框架,只接触过三种:ThinkPHP、Laravel、Yii,前两种作了解,项目中用的Yii。 一、3种框架简述     ThinkPHP(TP)是一个快速、兼容而且简单的轻量级国产PHP框架,正式版需要PHP5.0以上版本支持。它是从Struts结构移植过来并做了改进和完善,同时借鉴了国外很多优秀的框架和模式,融合了Struts的思想、TabLib标签库、ORM映射和Acti 阅读详情

相关推荐

yii2框架-yii2的组件和服务定位器(四)

上一节主要是分析了yii2的自动加载函数,下面在分析一下yii2的核心组件与服务定位器。 其实yii2的核心组件主要有以下: //日志组件 'log' => ['class' => 'yii\log\Dispatcher'], //视图组件,这个组件代表视图文件中的$this 'view' => ['class' => 'yii\web\View'], //格式化组件,将一些输出按照一

bingcool 4631

Yii2 之日志实践总结

▪ 前言 Yii2 详细的日志使用参见 官方教程,这里我们仅对 Yii2 日志相关的疑难问题做些笔记以及在人性化方面做一点点的小改造。 ▪ 消息跟踪级别 在官方教程中有个 消息跟踪级别 的配置: 'components' => [ 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [...], ], ], 官方的说明是:上面的应用配置设置了 yii\log\Dispa

外来物种 747

使用Yii2 Gii为Laravel框架生成代码的综合指南

Laravel是一个基于PHP的开源Web应用框架,以其优雅的语法和丰富的功能闻名。它旨在提供一个更简单、更有表达力的方式来构建复杂的Web应用程序。自2011年首次发布以来,Laravel因其所提供的功能强大且易于使用的工具,成为了PHP开发者社区中最受欢迎的框架之一。Yii2框架的应用生命周期是一个清晰的多阶段过程,从初始化请求直到最终响应被发送给用户。一个典型的请求处理流程如下:请求初始化:当Web请求到达时,Yii2首先会加载配置文件和启动引导程序。请求路由。

weixin_35794316的博客 986

Yii2.0如何进行日志记录?底层原理是什么?

在 Yii2.0 中,日志记录器的底层实现是通过 PSR-3 接口来实现的。PSR-3 是 PHP 标准推荐的日志接口规范,它定义了一套通用的日志接口,使得不同的日志记录器可以使用相同的接口来记录日志消息。Yii2.0 的日志记录器实现了 PSR-3 接口,因此可以轻松地与其他符合该规范的日志记录器进行集成。其中,$message 参数是要记录的日志消息,$category 参数是日志分类,用于标识该日志消息的来源。可以根据需要使用不同的日志级别来记录不同类型的日志消息。

长风破浪会有时的博客 726

别再为倍福EL6021/EL6022的RS485接线头疼了!手把手教你硬件跳线与软件配置(附Modbus RTU主站例程)

本文详细解析了倍福EL6021/EL6022模块的RS485硬件跳线与软件配置方法,包括Modbus RTU主站编程实战。从端子定义、跳线操作到TwinCAT 3环境设置,提供完整的通信例程和故障排查技巧,帮助工程师快速解决工业现场通信问题。

weixin_30634661的博客 592

Kylin-Desktop-V10-SP1海光版虚拟机安装全流程(含桥接网络配置)

本文详细介绍了在VMware虚拟机中安装Kylin-Desktop-V10-SP1海光版操作系统的完整流程,重点解决了基于海光(Hygon C86)平台的网络配置难题。内容涵盖从镜像准备、虚拟机创建、系统安装到桥接网络配置的三种实战方法,并提供了安装后的优化与必备软件配置指南,帮助用户高效搭建国产化测试与开发环境。

weixin_29323493的博客 357

如何使用Yii2的日志记录功能?

在这个说明书中,我们可以指定日志应该记录哪些信息,以及这些信息应该保存在哪里。配置好日志记录器后,我们就可以在应用程序的代码中使用它来记录日志了。就像我们平时写日记一样,只需要简单地调用一个方法,就可以把想要记录的信息写入日志中。比如,我们可以记录一个用户成功登录的信息,或者记录一个错误发生的信息。比如,有人登录了我们的网站,或者有人点击了某个按钮,这些都可以被记录下来。总的来说,Yii2的日志记录功能就像是我们应用程序的一个小助手,它帮助我们记录下重要的事件和信息,方便我们以后查看和分析。

长风破浪会有时的博客 944

持续集成介绍及Jenkins自动化测试部署

学习持续集成及jenkins的自动化测试部署

ouihsiad的博客 4577

YII2框架日志深解读

1,规范化错误处理和错误日志捕获非常重要; 2,用户需要知道的错误才会以错误形式返回给前端,而开发者层面的参数错误,异常,以及数据处理错误,则应该记录在错误日志中,未来通过结合redis的方式,给手机发送消息通知,及时告警 原理: 用target设定一些规则,尤其是categoys,是一个过滤规则,支持“*” 匹配,一般传入都是__METHOD__ 作为\Yii::trace($message, __METHOD__)第二个参数传入,这样该函数会调用配置的targets来进行循环匹配,将匹配到的日..

王森的博客 799

基于Llama 3搭建中文版(Llama3-Chinese-Chat)大模型对话聊天机器人

前面两篇博文,我们在笔记本部署了Llama 3 8B大模型,使用Ollama搭建了基于Web 可视化对话机器人。在使用过程中,大模型经常出现中文问题英文回答的问题。本博文就用Llama3-Chinese-Chat微调模型来解决这个问题……

老牛啊 9240

深入探讨:StoreKit 2的交易处理与收据验证

iOS应用开发中,StoreKit 2带来收据处理和交易验证的新变化。本文通过实例分析,对比传统StoreKit与StoreKit 2的差异,指出直接访问sandboxReceipt文件可能引发错误。解决方案是使用Transaction对象和SKReceiptRefreshRequest,详细介绍了如何初始化ReceiptLoader、处理交易更新及验证收据的完整流程,帮助开发者适应新框架,确保购买流程安全可靠。

m0_74337424的博客 357

Yii2日志配置分享

之前日志在man-local.php 配置,今天测试了一下这样配置可以 索性就放在main.php。这样就不用考虑不通环境的目录问题了。

孙玉杰的博客 323

【NI Multisim 14.0编辑环境——项目管理器】

主窗口包括标题栏、菜单栏、工具栏、工作区域、电子表格视图(信息窗口)、状态栏及项目管理器7个部分。 上期我们了解了工具栏,今天我们继续了解项目管理器。 一、项目管理器 在原理图设计中经常用到的工作面板有“设计工具箱”面板、“SPICE网表查看器”面板及“LabVIEW 协同仿真终端”面板。 1.“设计工具箱”面板 基本位于工作界面左侧,主要用于层次电路的显示。启动软件,默认创建的“设计1”以分层的形式显示出来。 那么如何打开“设计工具箱”面板呢?如图所示:在该面板中显示 SPICE 网表的输入,输出

RL2698853114的博客 2037

sentry2 php,yii2日志组件,Sentry日志收集,kafka消息队列

日志系统web.php配置'log'=>['travelevel'=>YII_DEBUG?3:0;//追踪级别'targets'=>[[‘class’=>'yii\log\FileTarget',//文件'levels'=>['error','warning'],//记录的错误级别‘logFile’=>'@app/runt...

weixin_32558567的博客 570

车企自动泊车技术全解|纯视觉/多传感器融合双路线、端到端大模型革新 助力机械车位/无划线车位/极窄车位精准泊车落地

随着智能驾驶技术全面下沉,自动泊车已从高端车型专属配置,普及至十万级家用车型,成为车载核心刚需功能。但市面主流车企的泊车能力差距极大,核心差异源于传感器硬件架构、算法迭代逻辑、场景训练体系的全方位分化。传统规则式泊车算法仅适配标准划线车位,面对地库暗光、标线磨损、机械双层车位、极窄靠墙车位、无划线空地泊车等真实长尾场景极易失效。

getusushu的博客 108

华为OD技术面真题 - Python开发 - 2

汇总华为OD技术面八股Python八股,高频技术真题并提供详细解答。

qq_45776114的博客 910

Yii2_fecshop错误处理与日志系统:高效监控电商平台运行状态的完整指南

Yii2_fecshop作为基于Yii2框架的专业电商系统,其错误处理与日志系统是保障在线商城稳定运行的核心组件。本文将详细介绍如何通过系统内置的错误捕获机制和服务日志功能,实时监控系统运行状态,快速定位并解决问题,确保电商平台的顺畅运营。 ## 错误处理系统架构:多场景适配的设计理念 Yii2_fecshop采用分层设计的错误处理架构,针对不同应用场景提供专用解决方案。系统在`yii/web

gitblog_00837的博客 1125

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

CLI模式下Yii2的log问题追踪

转载请注明出处:https://tlanyan.me/trace-log-... 命令行下运行长时间任务,发现Yii2的log组件不能正常输出日志。空闲之余逐步追踪问题,终于发现原因,以下是问题追踪记录。 问题复现 为了复现问题,预先准备了log组件的配置: // file: console/config/console-local.p...

weixin_34232617的博客 365

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Yii2 日志(log)配置与使用

1.配置在配置文件main.php或者main-local.php中配置参数return [ //日志使用时需要使用的 'bootstrap' => ['log'], 'components' => [ //日志配置 'log' => [ 'targets' => [ /*

高玉龙的博客 4万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Yii2日志使用方法

Yii2日志使用方法

qq_43668086的博客 622

YII2中实现操作日志记录

操作日志记录 对操作日志进行记录,这个可以清晰的对用户(管理员)的操作行为进行记录。这个对于后期的一些必要查询等操作是很方便的。 YII2日志框架 Yii提供了一个强大的日志框架,这个框架具有高度的可定制性和可扩展性。使用这个框架, 你可以轻松地记录各种类型的消息,过滤它们, 并且将它们收集到不同的目标,诸如文件,数据库,邮件。 使用Yii日志框架涉及下面的几个步骤: 在你代码里的...

谷子的博客 5193

YII2中日志的配置与使用

YII2中日志的配置与使用 YII2中给我们提供了非常方便的日志组件,只需要简单配置一下就可以使用。 我们在config/web.php中配置如下: return [ //log必须在bootstrap期间就被加载,便于及时调度日志消息到目标 ‘bootstrap’ => [‘log’], 'components' => [ 'log' => [ //消息...

qq_36810917的博客 256

Yii2中记录log日志的配置和使用方法

日志配置 'components' => [     'log' => [  'traceLevel' => YII_DEBUG? 3 : 0,           'targets' => [               [                 'class' =>'yii\log\FileTarget',           'levels' =>

qiuxuemei915的专栏 6889

如何给yii2.0项目配置日志监控?使用场景是什么?底层原理是什么?

配置步骤:在配置文件中设置日志组件,配置多个目标(如文件、数据库、邮件),并在代码中使用等方法记录日志。使用场景:包括错误跟踪、性能监控、安全审计、调试和开发、用户行为分析等。底层原理:涉及日志记录机制、日志级别、日志目标、日志格式化和日志过滤等技术。通过配置日志监控,你可以更好地了解应用程序的运行状态,及时发现和解决问题,提高系统的稳定性和可维护性。

长风破浪会有时的博客 1271

Yii2 日志处理

Yii2 日志处理   最近开发一个新的PHP项目,终于脱离了某框架的魔爪(之前被折磨的不轻),选用了江湖中如雷贯耳的Yii2框架。每个项目代码的运行,日志是必不可少的,在开发中踩了一遍Yii2日志管理的坑,看过很多网上对Yii2日志的配置介绍,今天总结一下Yii2对日志的处理分享给大家。 1.首先看一下log配置: 复制代码 1 return [ 2 ‘traceLevel’ =>...

qq_36810917的博客 636
上一篇: redis持久化(万一redis突然宕机了咋办?数据会丢失吗?)
下一篇: crontab定时任务不执行的一些原因总结
firstcode666
博客等级 码龄5年 53粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值