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 相关文章推荐
php Smarty date_format [格式化时间日期]
Mar 15 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
Oct 12 PHP
PHP数据库调用类调用实例(详细注释)
Jul 12 PHP
一个非常完美的读写ini格式的PHP配置类分享
Feb 12 PHP
php通过前序遍历树实现无需递归的无限极分类
Jul 10 PHP
合格的PHP程序员必备技能
Nov 13 PHP
初识ThinkPHP控制器
Apr 07 PHP
Yii框架分页实现方法详解
May 20 PHP
PHP echo()函数讲解
Feb 15 PHP
实例讲解PHP表单处理
Feb 15 PHP
PHP常量define和const的区别详解
May 18 PHP
php项目中类的自动加载实例讲解
Sep 12 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模拟post行为代码总结(POST方式不是绝对安全)
2012/02/22 PHP
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
php将字符串随机分割成不同长度数组的方法
2015/06/01 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
JavaScript的document对象和window对象详解
2010/12/30 Javascript
JavaScript面向对象设计二 构造函数模式
2011/12/20 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
jquery显示隐藏input对象
2014/07/21 Javascript
JavaScript中的类与实例实现方法
2015/01/23 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
2016/06/03 Javascript
基于JavaScript代码实现自动生成表格
2016/06/15 Javascript
Bootstrap基本样式学习笔记之表格(2)
2016/12/07 Javascript
ES6解构赋值的功能与用途实例分析
2017/10/31 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
在ironpython中利用装饰器执行SQL操作的例子
2015/05/02 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
ubuntu17.4下为python和python3装上pip的方法
2018/06/12 Python
python简单验证码识别的实现方法
2019/05/10 Python
python 字典操作提取key,value的方法
2019/06/26 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
python中K-means算法基础知识点
2021/01/25 Python
HTML5 Canvas 实现K线图的示例代码
2019/12/23 HTML / CSS
美国户外烹饪产品购物网站:Outdoor Cooking
2020/01/10 全球购物
应聘护士自荐信
2013/10/21 职场文书
医药专业应届毕业生求职信范文
2014/01/01 职场文书
四年级评语大全
2014/04/21 职场文书
给校长的建议书400字
2014/05/15 职场文书
迎国庆演讲稿
2014/09/15 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS