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获得用户使用的代理服务器ip即真实ip
Dec 31 PHP
mysql5的sql文件导入到mysql4的方法
Oct 19 PHP
在JavaScript中调用php程序
Mar 09 PHP
PHP Document 代码注释规范
Apr 13 PHP
PHP+MySQL 手工注入语句大全 推荐
Oct 30 PHP
PHP MYSQL乱码问题,使用SET NAMES utf8校正
Nov 30 PHP
PHP 字符串正则替换函数preg_replace使用说明
Jul 15 PHP
php 中的4种标记风格介绍
May 10 PHP
php环境套包 dedeampz 伪静态设置示例
Mar 26 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
Feb 15 PHP
php 类中的常量、静态属性、非静态属性的区别
Apr 09 PHP
PHP实现的随机红包算法示例
Aug 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实现编辑和保存文件的方法
2015/07/20 PHP
Laravel手动分页实现方法详解
2016/10/09 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
thinkPHP框架中执行事务的方法示例
2018/05/31 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
2019/09/29 PHP
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
推荐一个封装好的getElementsByClassName方法
2014/12/02 Javascript
超级简单实现JavaScript MVC 样式框架
2015/03/24 Javascript
Backbone.js的一些使用技巧
2015/07/01 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
javascript使用Promise对象实现异步编程
2016/03/01 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
vue将单页面改造成多页面应用的方法
2018/11/25 Javascript
vue的for循环使用方法
2019/02/12 Javascript
vue 中 beforeRouteEnter 死循环的问题
2019/04/23 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
javascript 使用sleep函数的常见方法详解
2020/04/26 Javascript
javascript实现贪吃蛇小游戏
2020/07/28 Javascript
javascript使用正则表达式实现注册登入校验
2020/09/23 Javascript
Flask配置Cors跨域的实现
2019/07/12 Python
Python如何对XML 解析
2020/06/28 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
2020/10/31 Python
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
html Table 表头固定的实现
2019/01/22 HTML / CSS
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
美国在线购买空气净化器、除湿器、加湿器网站:AllergyBuyersClub
2021/03/16 全球购物
北大青鸟学生求职信
2013/09/24 职场文书
大学四年规划书范文
2013/12/27 职场文书
销售主管岗位职责
2014/02/08 职场文书
中学教师师德师风演讲稿
2014/08/22 职场文书
千与千寻观后感
2015/06/04 职场文书
小学秋季运动会加油口号及加油稿
2019/08/19 职场文书
图解排序算法之希尔排序Java实现
2021/06/26 Java/Android
Python OpenCV超详细讲解基本功能
2022/04/02 Python