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 服务器调试 Zend Debugger 的安装教程
Sep 25 PHP
PHP 判断变量类型实现代码
Oct 23 PHP
php 读取文件乱码问题
Feb 20 PHP
PHP乱码问题,UTF-8乱码常见问题小结
Apr 09 PHP
深入HTTP响应状态码速查表的详解
Jun 07 PHP
PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
Sep 24 PHP
php中Ctype函数用法详解
Dec 09 PHP
php使用数组填充下拉列表框的方法
Mar 31 PHP
thinkphp验证码的实现(form、ajax实现验证)
Jul 28 PHP
Yii2实现增删改查后留在当前页的方法详解
Jan 13 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 PHP
phpquery中文手册
Mar 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实现CSV文件的导入和导出类
2015/03/24 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
2017/07/03 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
PHP正则判断一个变量是否为正整数的方法
2019/02/27 PHP
基于jQuery的日期选择控件
2009/10/27 Javascript
JS验证身份证有效性示例
2013/10/11 Javascript
使用JavaScript获取地址栏参数的方法
2014/12/19 Javascript
webpack入门+react环境配置
2017/02/08 Javascript
详解利用 Vue.js 实现前后端分离的RBAC角色权限管理
2017/09/15 Javascript
解决vue页面刷新或者后退参数丢失的问题
2018/03/13 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
2019/01/27 jQuery
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
Node.js 在本地生成日志文件的方法
2020/02/07 Javascript
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
[00:52]玛尔斯技能全介绍
2019/03/06 DOTA
python实现代理服务功能实例
2013/11/15 Python
Python读写unicode文件的方法
2015/07/10 Python
Python多线程结合队列下载百度音乐的方法
2015/07/27 Python
Python程序中用csv模块来操作csv文件的基本使用教程
2016/03/03 Python
Python如何使用Gitlab API实现批量的合并分支
2019/11/27 Python
matplotlib基础绘图命令之errorbar的使用
2020/08/13 Python
python 发送get请求接口详解
2020/11/17 Python
python如何修改文件时间属性
2021/02/05 Python
世界上最大的在线汽车租赁预订平台:Rentalcars.com(支持中文)
2018/10/12 全球购物
CK巴西官方网站:Calvin Klein巴西
2019/07/19 全球购物
一帮一活动总结
2014/05/08 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
我是特种兵观后感
2015/06/11 职场文书
《雷雨》教学反思
2016/02/20 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript
详解JavaScript中Arguments对象用途
2021/08/30 Javascript
使用jpa之动态插入与修改(重写save)
2021/11/23 Java/Android
python中mongodb包操作数据库
2022/04/19 Python
Python如何加载模型并查看网络
2022/07/15 Python