Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法


Posted in PHP onAugust 16, 2018

本文实例讲述了Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法。分享给大家供大家参考,具体如下:

Laravel中使用monolog_mysql将系统日志信息保存到mysql数据库

源码参考: https://github.com/markhilton/monolog-mysql

一、安装Installation

在文件根目录:

composer require markhilton/monolog-mysql

发现composer.json文件里的"require"多了一行:

"markhilton/monolog-mysql": "^0.1.6",

如果执行报错检查php版本和laravel(5.5以上)版本,

或者可以自己手动粘贴"markhilton/monolog-mysql": "^0.1.6"composer.json上去,

然后执行:

compser update

可以达到相同的效果

成功后发现vendor里面多了一个markhilton的文件夹

二、在config/app.php 的'providers'里面加入

'providers' => array( // ... Logger\Laravel\Provider\MonologMysqlHandlerServiceProvider::class,);

三、生成数据库文件

Publish config using Laravel Artisan CLI.
php artisan vendor:publish

执行完上面语句发现database/migration里多了一个create_logs_table的文件

将文件重命名为 2018_03_14_034420_create_logs_table(一定要是这种格式的文件名才可以执行数据库迁移)

可以自定义数据库表名称,默认为logs ,在这里我改成sys_log

然后执行下面语句:

四、数据库迁移Migrate tables.

php artisan migrate

生成了一个sys_log的表

五、应用集成 Application Integration

在bootstrap/app.php里面加入

$app->configureMonologUsing(function($monolog) use($app) { $monolog->pushHandler(new Logger\Monolog\Handler\MysqlHandler());});

六、配置环境 Environment configuration

在.env的配置文件中加入(保存日志的数据库连接类型,以及保存日志的表名称)

DB_LOG_TABLE=sys_log //保存日志的数据库表名称
DB_LOG_CONNECTION=mysql //保存日志的数据库连接类型

七、修改

真正实现将日志插入数据库的核心文件位置在:
/vendor/markhilton/monolog-mysql/src/Logger/Monolog/Handler/MysqlHandler.php

将自定义的表名称修改为sys_log

<?php
namespace Logger\Monolog\Handler;
use DB;
use Illuminate\Support\Facades\Auth;
use Monolog\Logger;
use Monolog\Handler\AbstractProcessingHandler;
class MysqlHandler extends AbstractProcessingHandler
{
protected $table;
protected $connection;
public function __construct($level = Logger::DEBUG, $bubble = true)
{
$this->table = env('DB_LOG_TABLE', 'sys_log');
$this->connection = env('DB_LOG_CONNECTION', env('DB_CONNECTION', 'mysql'));
parent::__construct($level, $bubble);
}
protected function write(array $record)
{
$data = [
'instance' => gethostname(),
'message' => $record['message'],
'channel' => $record['channel'],
'level' => $record['level'],
'level_name' => $record['level_name'],
'context' => json_encode($record['context']),
'remote_addr' => isset($_SERVER['REMOTE_ADDR']) ? ip2long($_SERVER['REMOTE_ADDR']) : null,
'user_agent' => isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null,
'created_by' => Auth::id() > 0 ? Auth::id() : null,
'created_at' => $record['datetime']->format('Y-m-d H:i:s')
];
DB::connection($this->connection)->table($this->table)->insert($data);
}
}

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
服务器端解压缩zip的脚本
Dec 22 PHP
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
Nov 07 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
Jun 19 PHP
php rsa加密解密使用详解
Jan 14 PHP
php通过array_shift()函数移除数组第一个元素的方法
Mar 18 PHP
FastCGI 进程意外退出造成500错误
Jul 26 PHP
示例详解Laravel的注册重构
Aug 14 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
Oct 20 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
ajax+php实现无刷新验证手机号的实例
Dec 22 PHP
php利用ob_start()清除输出和选择性输出的方法
Jan 18 PHP
laravel 操作数据库常用函数的返回值方法
Oct 11 PHP
Laravel中的chunk组块结果集处理与注意问题
Aug 15 #PHP
PHP curl批处理及多请求并发实现方法分析
Aug 15 #PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
Aug 15 #PHP
php使用curl获取header检测开启GZip压缩的方法
Aug 15 #PHP
深入研究PHP中的preg_replace和代码执行
Aug 15 #PHP
PHP中一个有趣的preg_replace函数详解
Aug 15 #PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
Aug 15 #PHP
You might like
php四种基础算法代码实例
2013/10/29 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
Yii2使用swiftmailer发送邮件的方法
2016/05/03 PHP
获取网站跟路径的javascript代码(站点及虚拟目录)
2009/10/20 Javascript
jQuery EasyUI API 中文文档 - ComboBox组合框
2011/10/07 Javascript
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
浅谈JavaScript字符集
2014/05/22 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
Require.JS中的几种define定义方式示例
2017/06/01 Javascript
ionic选择多张图片上传的示例代码
2017/10/10 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
小程序点击图片实现自动播放视频
2020/05/29 Javascript
JS highcharts动态柱状图原理及实现
2020/10/16 Javascript
[01:06:07]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS CIS
2014/05/22 DOTA
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
[06:07]刀塔密之二:攻之吾命受之吾幸
2014/07/03 DOTA
Python爬取数据保存为Json格式的代码示例
2019/04/09 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
2020/07/07 Python
python statsmodel的使用
2020/12/21 Python
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
营业员实习自我鉴定
2013/12/07 职场文书
餐饮主管岗位职责
2013/12/10 职场文书
中秋节超市促销方案
2014/01/30 职场文书
超市总经理岗位职责
2014/02/02 职场文书
接待员岗位责任制
2014/02/10 职场文书
院领导写的就业推荐信
2014/03/09 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
2015中秋节晚会开场白
2015/07/30 职场文书
母亲节感言
2015/08/03 职场文书
大学生创业计划书
2019/06/24 职场文书
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2021/06/26 MySQL
Redis实战高并发之扣减库存项目
2022/04/14 Redis