YII 日志配置

本文详细介绍了Yii框架中的日志配置,包括基础配置、日志记录到文件、错误日志邮件通知以及解决日志文件过多导致的阻塞问题。通过设置日志文件路径、大小限制和格式,可以有效管理和监控应用运行状态。同时,当发生严重错误时,配置邮件目标可以即时发送错误报告给运维人员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

若想看本文的视频教程,可关注我的微信公众号,搜索历史文章查看:
在这里插入图片描述

1、概述

本文主要介绍如何实现Yii的日志配置,主要包括如下内容:

  • 基础配置
  • 记录日志到文件
  • 把严重的错误日志自动发送到邮箱
  • 解决明明写日志了,但是日志文件中没有记录的问题
  • 解决日志文件数量达到上限后,日志记录阻塞严重的问题

2、基础配置

在记录日志的时候,我们要考虑如下几个方面的内容:

  • 日志文件存放到哪里
  • 日志文件的命名规则
  • 日志文件的大小限制
  • 日志文件的内容格式

请参考如下配置:

return [
    // 必须在引导期间加载“log”组件
    'bootstrap' => ['log'],
    // “log”组件处理带时间戳的消息。 设置 PHP 时区以创建正确的时间戳
    'timeZone' => 'PRC',
    'components' => [
        'log' => [
            'flushInterval' => 1,
            'traceLevel' => 0,//YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    //logVars 为空,可以减少输出不必要的信息
                    'logVars' => [],
                    'class' => 'yii\log\FileTarget',
                    'exportInterval' => 1,
                    'levels' => ['info','error'],
                    'categories' => ['test'],
                    //日志文件存放路径和文件名,以天为文件名可以减少日志文件的大小
                    'logFile' => '@backend/runtime/logs/test/'.date("Y-m-d").'.log',
                    'maxFileSize' => 1024 * 100, //每个日志文件最大100M
                    'maxLogFiles' => 100,//最大的文件数量
                    'prefix' => function() {   //日志格式自定义 回调方法
                        return "";
                    },
                ],
            ]
        ],
    ],
];

注意:如果在出发日志记录功能的时候,没有在目标日志文件看到记录,那么请设置以下这两个值:

  • 'flushInterval' => 1
  • 'exportInterval' => 1

因为Yii会在日志栈中积累到一定数量的时候才会把日志写到日志文件中,因此我们需要把上述两个配置项都设置为1,表示立刻输出到日志文件。

3、记录日志到文件

Yii::info("Hello World!", "test"); //此处的"test"是指categories配置

上述语句可以把Hello World!输入到日志文件中,得到的结果如下:

2021-07-18 08:53:50 [info][test] Hello World!

由于我们也定义了error的日志类型('levels' => ['info','error']),因此也可以这么做:

Yii::error("Hello World!", "test");

日志文件记录如下:

2021-07-18 17:11:58 [error][test] Hello World!

4、记录日志代码信息

如果想知道日志文件中的日志是从哪个文件的哪行代码打印的,可以设置这个参数'traceLevel' => 3,可以得到如下的效果:

2021-07-18 08:52:59 [info][test] Hello World!
    in /app/backend/controllers/SiteController.php:104

5、发送到邮件

如果我们遇到致命性质的bug报错,需要把错误日志第一时间发送给运维人员,此时就需要用到日志的发邮件功能给,配置如下:

return [
    // 必须在引导期间加载“log”组件
    'bootstrap' => ['log'],
    // “log”组件处理带时间戳的消息。 设置 PHP 时区以创建正确的时间戳
    'timeZone' => 'PRC',
    'components' => [
        'log' => [
            'flushInterval' => 1,
            'traceLevel' => 0,//YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'logVars' => [],
                    'class' => 'yii\log\EmailTarget',
                    'levels' => ['error','info'],
                    'categories' => ['mail'],
                    'message' => [
                        'from' => ['chenzhiweiwk@sina.com'],
                        'to' => ['chenzhiweiwk@sina.com'],
                        'subject' => ucfirst(YII_ENV).' Exception',
                    ],
                ],
            ]
        ],
    ],
];

效果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aCrQb1dt-1626601235444)(.assets/img/image-20210718173043220.png)]

6、写日志阻塞的问题

我曾经遇到一个问题,当日志文件达到100个上限后,再往日志里记录消息时,整个系统阻塞严重,原因是Yii会处理这100个文件,把老数据删除,然后记录新数据,由于每个文件都很大,因此要花费很长的时间。

解决方法:

我们动态指定日志文件,比如说以日期为文件名,这样的话YII就会新的文件名执行规则,可以避免这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值