LoggerOne
LoggerOne
一个高效、简约、灵活高性能的遵循 PSR-3 的 PHP 日志类库实现。
特性
天然的缓存特性(Logger实例属性),延迟批量写入。
安装&使用
Install
$ composer require logger-one/logger-one
默认的调用方式
在默认情况下,Logger会使用FileHandler 和 CommonFormatter 输出一个保存在Logger同目录的命名格式为 %Y%m%d的日志文件。
$logger = LoggerOne\Logger::getInstance(); // Strongly recommend
$message = 'test log message {placeholder1} {placeholder2}';
$replacements = ['placeholder1' => 'Foo', 'placeholder2' => 'bar'];
$logger->info($message, $replacements);
改变默认日志文件保存地址
$logFile = './tmp/loggerOne.log'; // Your path where you want $handler = new LoggerOne\Handler\FileHandler($logFile); $logger->setHandler($handler); $logger->info($message);
指定使用特定的Handler/Formatter
$handler = new LoggerOne\Handler\FooHandler();
$handler = new LoggerOne\Formatter\BarFormatter();
$logger->setHandler($handler)->setFormatter($formatter);
$logger->info('some test log message');
立即输出到日志文件的调用方法
这样将不缓存日志内容,而把调用前所有的message立即写入到标的处。
...
$logger->info('some test log message')->flush();
...
定制&扩展
Handler的扩展方式
将你的扩展文件放置到LoggerOne/Handler目录
<?php
namespace LoggerOne\Handler; class MySQLHandler implements Handler
{
protected $db;
protected $table_name;
public function __construct(string $table_name, object $dbHandle = null)
{
$this->table_name = $table_name;
$this->db = $dbHandle;
}
public function write($messages)
{
$batchData = [];
foreach ($messages as $level => $message) {
$batchData[] = ['level' => $level, 'message' => $message, 'created' => time()];
}
$this->db->insertBatch($this->table_name, $batchData);
}
}
使用扩展
$logger = new LoggerOne\Logger();
$handler = new LoggerOne\Handler\MysqlHandler($yourLogTableName, $yourDbHandle);
$logger->setHandler($handler);
$logger->info('some test log message');
Formatter的扩展方式
聪明的你,你可以按你想发灵活的编写你希望的Formatter处理类,过程和Handler扩展流程同理,放到Formatter目录就可以开始使用了。
注意
如果你不使用composer, 请记得用你的方式加载所有必须的依赖类库。
如果你做了Handler扩展,为了性能请尽量确保它是批量完成写操作的。
Github地址:https://github.com/lijiebin/LoggerOne
LoggerOne的更多相关文章
- 一起学习造轮子(二):从零开始写一个Redux
本文是一起学习造轮子系列的第二篇,本篇我们将从零开始写一个小巧完整的Redux,本系列文章将会选取一些前端比较经典的轮子进行源码分析,并且从零开始逐步实现,本系列将会学习Promises/A+,Red ...
随机推荐
- 一次精疲力尽的改bug经历
一.介绍 最近一直在做有关JavaScriptCore的技术需求,上周发现一个问题,当在JavaScriptCore在垃圾回收时,项目会有一定几率发生崩溃.崩溃发生时调用堆栈如下: 图1 调用堆栈 先 ...
- 基于ECharts的饼状数据展示
一.导入ECharts文件 二.HTML代码 大小后期自己调 三.后台代码 四.js代码 不要问为什么- -我是扒下来的 可复制代码: //基于准备好的dom,初始化echarts实例 var myD ...
- Mac下安装virtualenv, 并在PyCharm中使用
今天在安装一个leader写的package的时候,同事建议安装到虚拟环境中,再在PyCharm里使用该虚拟环境即可.此处记录下经过: 开发Python应用的时候,有时会遇到不同的Python应用依赖 ...
- python全栈学习--day10(函数进阶)
一,引言 现在我有个问题,函数里面的变量,在函数外面能直接引用么? def func1(): m = 1 print(m) print(m) #这行报的错 报错了:NameError: name 'm ...
- Java虚拟机之类加载机制
⑴背景 Java虚拟机把Class文件加载到内存中,并对数据进行校验,转换解析,和初始化,最终形成被虚拟机直接使用的Java类型,这就是类加载机制. ⑵Jvm加载Class文件机制原理 类的生命周 ...
- 201621123062《java程序设计》第11周作业总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 思维导图: 2. 书面作业 本次PTA作业题集多线程 2.1. 源代码阅读:多线程程序BounceThread 2 ...
- 20162330 实验二 《Java面向对象程序设计》 实验报告
2016-2017-2 实验报告目录: 1 2 3 4 5 20162330 实验二 <Java面向对象程序设计> 实验报告 课程名称:<程序设计与数据结构> 学生班级:162 ...
- 冲刺NO.1
Alpha冲刺第一天 站立式会议 项目进展 项目的第一天,主要工作是对项目的开发进行规划,以及将规划的成果转化为燃尽图与博客文章.依据项目需求分析报告与开题报告中已经完成的设计任务和项目规划,我们将系 ...
- windows系统下安装 node.js (node.js安装及环境配置)
node.js简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Node. ...
- cocos2d 判断旋转矩形是否包含某个点
本来想画个图演示一下,但是折腾了一会发现画不好,我的win10系统没有安装office,以后再看的话再补上吧.不废话了. 如图所以,如果判断点P是否被矩形A所包含,非常容易.那么如果矩形A以中心点逆时 ...