aishan / laravel-log-notice
log notice for laravel
0.1.2
2017-06-29 09:32 UTC
Requires
- php: >=5.6
- php-amqplib/php-amqplib: ^2.6
This package is not auto-updated.
Last update: 2024-12-13 23:28:14 UTC
README
本项目支持自定义laravel框架的日志行为,提供异常日志邮件自动发送功能和推送异常日志到RabbitMQ中。
安装
* 目前只在laravel5.1及以上版本测试通过
composer require aishan/laravel-log-notice
使用
- 在config/app.php的“providers”中加入:
Aishan\LaravelLogNotice\LogNoticeServiceProvider::class,
- 拷贝配置文件到config目录:
在根目录执行:
php artisan vendor:publish --provider="Aishan\LaravelLogNotice\LogNoticeServiceProvider" --tag="config"
- 框架中加入配置Monolog代码
在bootstrap/app的return $app;
之前加入一下代码:
/** * 配置日志行为 */ $app->configureMonologUsing(function($monolog) use ($app) { $configureLogging = new \Aishan\LaravelLogNotice\LogNoticeService(); $configureLogging->configureMonolog($app ,$monolog); });
* 注意:使用这个扩展后,Laravel原本的日志配置将失效,譬如config/app.php
文件中关于关于日志的配置都将失效,而我们在此刻可以启用新的日志配置文件config/log-notice.php
4.配置
配置文件为config/log-notice.php
:
<?php return [ //日志RMQ连接配置 'log_rmq'=>env('LOG_RMQ_ENABLE',false),//是否开启日志推送到队列 'log_rmq_connect'=>[ 'host'=>env('RMQ_LOG_HOST'), 'port'=>env('RMQ_LOG_PORT'), 'user'=>env('RMQ_LOG_USER'), 'pass'=>env('RMQ_LOG_PASS'), 'vhost'=>env('RMQ_LOG_VHOST') ], 'log_rmq_source'=>env('RMQ_SOURCE','pvm-center'), 'log_rmq_job_queue'=>env('RMQ_QUEUE','default'),//发送消息到rmq的动作使用的job所需指定的laravel队列 //日志RMQ的队列配置 'log_rmq_queue'=>[ 'exchange' => 'e.log.frontend', 'routingKey' => 'r.log.frontend', 'exchangeType' => 'direct', 'queueName' => 'q.log.frontend' ], //邮件配置 'mail_enable'=>env('LOG_MAIL_ENABLE',false),//是否异常报错邮件发送 'mail_subject'=>env('LOG_MAIL_SUBJECT','Error Notice'),//通知邮件标题 'mail_receiver'=>env('LOG_MAIL_RECEIVER',''),//邮件接收者,多个收件人用逗号分隔 'mail_job_queue'=>env('LOG_MAIL_QUEUE','default'),//发送邮件job所所需指定的laravel队列 //本地日志文件 'log_local'=>env('LOG_LOCAL_ENABLE',true),//本地是否开启日志 'log_local_dir'=>'/logs/laravel.log',//基于storage目录 ];
* 其中,默认开启的为本地日志文件,邮件通知和推送消息至RabbitMQ的动作均需手动开启。
- 为什么消息会推送至RabbitMQ?
因为,团队生产环境用的Logstash是通过RMQ通信转发的,所以实际应用场景是将日志消息最终转入日志服务器;
2.什么样的日志会被邮件发送?
八种日志等级在系统的定义:
"DEBUG" => 100 "INFO" => 200 "NOTICE" => 250 "WARNING" => 300 "ERROR" => 400 "CRITICAL" => 500 "ALERT" => 550 "EMERGENCY" => 600
本扩展中的实现:
if($level >= 400){//ERROR 以上的日志信息发送至邮件 $logManager->sendEmail(); } if ($level >= 200) { $logManager->logToRMQ(); }
所以,debug和info的日志都不会以邮件形式发送,而往RabbitMQ中发送的日志只排除了debug类型的信息。