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 相关文章推荐
几种显示数据的方法的比较
Oct 09 PHP
php 中文和编码判断代码
May 16 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
Jan 30 PHP
ThinkPHP的I方法使用详解
Jun 18 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
May 12 PHP
PHP中的数组处理函数实例总结
Jan 09 PHP
你不知道的文件上传漏洞php代码分析
Sep 29 PHP
微信 开发生成带参数的二维码的实例
Nov 23 PHP
PHP合并数组函数array_merge用法分析
Feb 17 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
May 04 PHP
PHP分享图片的生成方法
Apr 25 PHP
PHP获取访问设备信息的方法示例
Feb 20 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 Session 变量的使用方法详解与实例代码
2013/09/11 PHP
Thinkphp实现站点静态化的方法详解
2017/03/21 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
javascript从右边截取指定字符串的三种实现方法
2013/11/29 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
2014年50个程序员最适用的免费JQuery插件
2014/12/15 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
readonly和disabled属性的区别
2015/07/26 Javascript
jQuery的$.extend 浅拷贝与深拷贝
2017/03/08 Javascript
js精确的加减乘除实例
2017/11/14 Javascript
基于Axios 常用的请求方法别名(详解)
2018/03/13 Javascript
vue通过指令(directives)实现点击空白处收起下拉框
2018/12/06 Javascript
Vue实现Layui的集成方法步骤
2020/04/10 Javascript
vue style width a href动态拼接问题的解决
2020/08/07 Javascript
ES6的循环与可迭代对象示例详解
2021/01/31 Javascript
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
python中csv文件的若干读写方法小结
2018/07/04 Python
python制作填词游戏步骤详解
2019/05/05 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
python循环嵌套的多种使用方法解析
2019/11/29 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
大学生表扬信范文
2014/01/09 职场文书
CAD制图人员的自荐信
2014/02/07 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
党委书记群众路线对照检查材料思想汇报
2014/10/04 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
员工工作表扬信
2015/05/05 职场文书
离婚上诉状范文
2015/05/23 职场文书
垂直极限观后感
2015/06/08 职场文书
高中语文教学反思范文
2016/02/16 职场文书
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers