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 相关文章推荐
BBS(php &amp; mysql)完整版(八)
Oct 09 PHP
下载文件的点击数回填
Oct 09 PHP
PHP 中文乱码解决办法总结分析
Jul 30 PHP
PHP的autoload自动加载机制使用说明
Dec 28 PHP
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
Apr 18 PHP
解析linux下安装memcacheq(mcq)全过程笔记
Jun 27 PHP
PHP随机生成随机个数的字母组合示例
Jan 14 PHP
那些年我们错过的魔术方法(Magic Methods)
Jan 14 PHP
php设置session值和cookies的学习示例
Mar 21 PHP
php输出金字塔的2种实现方法
Dec 16 PHP
Laravel实现表单提交
May 07 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
Aug 07 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
zend Framework中的Layout(模块化得布局)详解
2013/06/28 PHP
php递归函数中使用return的注意事项
2014/01/17 PHP
CI(CodeIgniter)框架中的增删改查操作
2014/06/10 PHP
使用Zttp简化Guzzle 调用
2017/07/02 PHP
从sohu弄下来的flash中展示图片的代码
2007/04/27 Javascript
用js生产批量批处理执行命令
2008/07/28 Javascript
javascript 函数声明与函数表达式的区别介绍
2013/10/05 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
2013/11/22 Javascript
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
2016/10/21 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
jquery实现左右轮播图效果
2017/09/28 jQuery
简述Angular 5 快速入门
2017/11/04 Javascript
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
js作用域和作用域链及预解析
2019/04/11 Javascript
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
vue video和vue-video-player实现视频铺满教程
2020/10/30 Javascript
Vue实现多页签组件
2021/01/14 Vue.js
对Python进行数据分析_关于Package的安装问题
2017/05/22 Python
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
pycharm安装和首次使用教程
2018/08/27 Python
对python中的高效迭代器函数详解
2018/10/18 Python
python中的单引号双引号区别知识点总结
2019/06/23 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
Python enumerate函数遍历数据对象组合过程解析
2019/12/11 Python
Python中pyecharts安装及安装失败的解决方法
2020/02/18 Python
Python新手学习raise用法
2020/06/03 Python
Html5嵌入钉钉的实现示例
2020/06/04 HTML / CSS
vivo智能手机官方商城:vivo
2016/09/22 全球购物
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
Blancsom美国/加拿大:服装和生活用品供应商
2018/07/27 全球购物
督导岗位职责
2015/02/04 职场文书
员工升职自我评价
2019/03/26 职场文书
nginx搭建NFS网络文件系统
2022/04/14 Servers