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 智能404跳转代码,适合换域名没改变目录的网站
Jun 04 PHP
zend api扩展的php对象的autoload工具
Apr 18 PHP
PHP无刷新上传文件实现代码
Sep 19 PHP
基于PHP文件操作的详解
Jun 05 PHP
对淘宝URL中ID提取的PHP代码
Sep 01 PHP
php调用google接口生成二维码示例
Apr 28 PHP
php生成百度sitemap站点地图类函数实例
Oct 17 PHP
最新最全PHP生成制作验证码代码详解(推荐)
Jun 12 PHP
thinkPHP交易详情查询功能详解
Dec 02 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
Jul 17 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
Oct 11 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
Apr 14 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 源代码压缩小工具
2009/12/22 PHP
php实现微信公众平台账号自定义菜单类
2015/10/11 PHP
PHP内核探索之变量
2015/12/22 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
jQuery chili图片远处放大插件
2009/11/30 Javascript
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
2011/01/01 Javascript
Jquery 的扩展方法总结
2011/10/01 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
javascript中setTimeout和setInterval的unref()和ref()用法示例
2014/11/26 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
javascript 作用于作用域链的详解
2017/09/27 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
浅析vue插槽和作用域插槽的理解
2019/04/22 Javascript
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
以一段代码为实例快速入门Python2.7
2015/03/31 Python
使用Python中的cookielib模拟登录网站
2015/04/09 Python
python3+PyQt5实现柱状图
2018/04/24 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
详解python运行三种方式
2019/05/13 Python
使用PyOpenGL绘制三维坐标系实例
2019/12/24 Python
python 基于DDT实现数据驱动测试
2021/02/18 Python
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
什么是封装
2013/03/26 面试题
银行求职信个人范文
2013/12/16 职场文书
小学教师师德反思
2014/02/03 职场文书
五年级科学教学反思
2014/02/05 职场文书
岗位职责说明书模板
2014/07/30 职场文书
个人查摆问题整改措施
2014/10/04 职场文书
中学生运动会广播稿
2015/08/19 职场文书
导游词之长城八达岭
2019/09/24 职场文书
python字典的元素访问实例详解
2021/07/21 Python