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 ...
随机推荐
- 套接字API
Q:套接字特点 A:管道,消息队列,信号量,共享内存这些通信机制只能允许同一计算机上运行的进程相互通信,而套接字不仅可以提供在同一计算机上的进程间通信,还可以提供不同计算机上的进程间通信. 服务器端: ...
- Linux x86_64内核中断初始化
Linux x86_64内核中断初始化 [TOC] 中断分类 Linux系统中,中断分为: 硬中断:由外部设备或者执行异常产生的需要快速处理的中断.如缺页中断.定时器硬件中断. 根据内部产生还是外部产 ...
- Mybatis学习笔记二
本篇内容,紧接上一篇内容Mybatis学习笔记一 输入映射和输出映射 传递简单类型和pojo类型上篇已介绍过,下面介绍一下包装类型. 传递pojo包装对象 开发中通过可以使用pojo传递查询条件.查询 ...
- Java并发编程实战(chapter_2)(对象发布、不变性、设计线程安全类)
一.发布与溢出 "发布(Publish)"一个对象的意思是指,使对象能够在当前作用于之外的代码中使用.这个"之外",尤为关键,各种出问题的地方,都是因为这个&q ...
- 巨人大哥谈Java中的Synchronized关键字用法
巨人大哥谈Java中的Synchronized关键字用法 认识synchronized 对于写多线程程序的人来说,经常碰到的就是并发问题,对于容易出现并发问题的地方价格synchronized基本上就 ...
- 在linux环境下安装JDK并配置环境变量
操作步骤如下 1.根据linux服务器的系统版本在官网下载相应linux版本JDK(32位下载x86,64位下载x64) 2.通过远程连接工具(filezilla)将下载好的JDK上传至linux服务 ...
- Beta冲刺第二天
一.昨天的困难 没困难 二.今天进度 局部测试并修复出现的bug 1.林洋洋:修复登录页面显示问题,修复日程查询问题 2.黄腾达:修复创建协作开始时间和结束时间没做检验的问题 3.张合胜:修复页面内容 ...
- 201621123050 《Java程序设计》第7周学习总结
1. 本周学习总结 1.1 思维导图:Java图形界面总结 2.书面作业 1. GUI中的事件处理 1.1 写出事件处理模型中最重要的几个关键词. 1.事件:用户的操作,例如点击或输入之类的操作 2. ...
- Python扩展模块——自动化(testlinkAPI的使用)
使用TESTLINKAPI首先要安装TestLink_API_Python_client-0.6.4(当前最新版本) 目前只使用到了通过api获取testlink中的自定义字段and值 url = ' ...
- hadoop2.6.0实践:000 虚拟机配置