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+DBM的同学录程序(3)
Oct 09 PHP
PHP HTML代码串截取代码
Dec 29 PHP
PHP session会话的安全性分析
Sep 08 PHP
PHP中is_file不能替代file_exists的理由
Mar 04 PHP
Thinkphp的volist标签嵌套循环使用教程
Jul 08 PHP
WordPress自定义时间显示格式
Mar 27 PHP
php超快高效率统计大文件行数
Jul 05 PHP
基于php实现七牛抓取远程图片
Dec 01 PHP
php实现简单爬虫的开发
Mar 28 PHP
PHP简单实现欧拉函数Euler功能示例
Nov 06 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
Feb 19 PHP
PHP获取星期几的常用方法小结
Dec 18 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 5.4 你必须要知道的
2013/08/07 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
php数据结构之顺序链表与链式线性表示例
2018/01/22 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
JS判断客服QQ号在线还是离线状态的方法
2015/01/13 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
使用jquery制作弹出框效果
2015/04/03 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
JavaScript实现下拉菜单的显示和隐藏
2016/01/05 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
深入浅析JavaScript中的作用域和上下文
2016/03/26 Javascript
jQuery简单实现title提示效果示例
2016/08/01 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(三)
2016/09/14 Javascript
Bootstrap3 图片(响应式图片&amp;图片形状)
2017/01/04 Javascript
VueJs组件之父子通讯的方式
2018/05/06 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
微信上传视频文件提示(推荐)
2018/11/22 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
vue实现行列转换的一种方法
2019/08/06 Javascript
Vue组件基础用法详解
2020/02/05 Javascript
python中精确输出JSON浮点数的方法
2014/04/18 Python
Python星号*与**用法分析
2018/02/02 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
python新手学习使用库
2020/06/11 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
土木工程应届生求职信
2013/10/31 职场文书
大四本科生的自我评价
2013/12/30 职场文书
大二学生学习个人自我评价
2014/01/19 职场文书
《猴子种树》教学反思
2014/02/14 职场文书
新学期国旗下演讲稿
2014/05/08 职场文书
2015年建筑工程工作总结
2015/05/13 职场文书
2015年路政工作总结
2015/05/22 职场文书
银行求职信范文
2019/05/13 职场文书