kabudu / event-logger
事件记录器是一个基于PHP的事件记录器库,它可以轻松地在您的Web应用程序中收集和查询基于用户或系统操作的事件。
v1.1.1
2017-06-29 21:23 UTC
Requires
- php: >=5.6.0
Requires (Dev)
- phpunit/phpunit: 4.*
Suggests
- mysql: for using the shipped MySQL persistence implementation
- sqlite: for unit test coverage and using the shipped SQLite persistence implementation
This package is not auto-updated.
Last update: 2024-09-20 21:00:06 UTC
README
事件记录器是一个基于PHP的事件记录器库,它可以轻松地在您的Web应用程序中收集和查询基于用户或系统操作的事件。
使用事件记录器,您可以
- 收集任何类型的统计数据,例如某个URL的点击次数、页面浏览量、转化率或您的Web应用程序、API或移动应用程序中的任何用户生成操作
- 收集并存储可读的事件日志,例如:Bob Smith在2015年1月12日午夜12:30更新了他的电子邮件地址
- 收集并存储可读的用户通知,例如:Bob Smith在2015年1月12日午夜12:30给您发送了一条消息
- 收集并存储系统事件,无论是可读的还是不可读的
- 以及任何其他类型的日志记录,您的想象力可以想象出来
特性
-
收集任何类型的事件数据
@see EventLogger\Event\EventInterface
-
查询和分析收集的数据
-
多种持久化策略(目前附带SQLite、MySQL和Null实现)
-
可扩展架构
-
使用 phpunit 进行全面测试覆盖
要求
- PHP 5.6.0+
- SQLite 3.0.7+(对于单元测试是必需的,您不需要使用提供的SQLite存储实现)
- 可选但推荐:Composer
入门指南
使用事件记录器最简单的方法是将其作为Composer包安装到您的应用程序中。Composer不是必需的,但它简化了此库的使用。
有关Composer的更多信息,请访问 https://getcomposer.org.cn/
a) 将event-logger添加到您的应用程序的composer.json文件中
// ...
"require": {
"kabudu/event-logger": "1.x" // The most recent tagged version
},
// ...
运行 composer install
b) 如果尚未这样做,请将Composer自动加载添加到您的项目引导文件中。(示例)
require 'vendor/autoload.php';
c) 如果您不使用Composer,只需下载包并将“src”文件夹复制到您的项目中,确保您的应用程序可以自动加载库的类
记录单个事件
use EventLogger\Event\Event;
use EventLogger\Logger\Logger;
use EventLogger\Storage\SQLiteStorage;
// Initialise an SQLite database/table
$pdo = new \PDO('sqlite:my_event_log.sqlite');
$pdo->exec(sprintf("CREATE TABLE IF NOT EXISTS %s (
id INTEGER PRIMARY KEY,
type TEXT,
sub_type TEXT DEFAULT NULL,
target_type TEXT DEFAULT NULL,
target_id INTEGER DEFAULT 0,
message INTEGER DEFAULT NULL,
data TEXT DEFAULT NULL,
created TEXT DEFAULT '0000-00-00 00:00:00',
action TEXT DEFAULT NULL,
user TEXT DEFAULT NULL
)",SQLiteStorage::TABLE_NAME));
// Create the storage strategy
$storage = new SQLiteStorage($pdo);
// Create the logger
$logger = new Logger($storage);
// Create an event
$event = new Event();
$event->setType('event');
$event->setSubType('pageview');
$event->setMessage('user [foo] viewed a page of interest to you');
$event->setData(array('[foo]' => 'bar'));
$event->setUser(2);
// Log the event
$logger->log($event);
记录多个事件
use EventLogger\Event\Event;
use EventLogger\Logger\Logger;
use EventLogger\Storage\SQLiteStorage;
use EventLogger\Event\Collection\EventCollection;
// Initialise an SQLite database/table
$pdo = new \PDO('sqlite:my_event_log.sqlite');
$pdo->exec(sprintf("CREATE TABLE IF NOT EXISTS %s (
id INTEGER PRIMARY KEY,
type TEXT,
sub_type TEXT DEFAULT NULL,
target_type TEXT DEFAULT NULL,
target_id INTEGER DEFAULT 0,
message INTEGER DEFAULT NULL,
data TEXT DEFAULT NULL,
created TEXT DEFAULT '0000-00-00 00:00:00',
action TEXT DEFAULT NULL,
user TEXT DEFAULT NULL
)",SQLiteStorage::TABLE_NAME));
// Create the storage strategy
$storage = new SQLiteStorage($pdo);
// Create the logger
$logger = new Logger($storage);
// Create an event
$event1 = new Event();
$event->setType('event');
$event->setSubType('pageview');
$event->setData(array('[foo]' => 'bar'));
$event->setUser(2);
// Create another event
$event2 = new Event();
$event->setType('event');
$event->setSubType('system');
$event->setMessage('A nominal value of [nominal] has been detected for the pressure release valve');
$event->setData(array('[nominal]' => '120'));
// create an event collection and add your events
$collection = new EventCollection();
$collection->addEvent($event1);
$collection->addEvent($event2);
// Log the events
$logger->log($collection);
将事件记录到多个持久化后端
注意:在实际应用程序中,您可能已实现了自己的持久化策略,例如MongoDB、Elasticsearch、Google Cloud Datastore等。
use EventLogger\Event\Event;
use EventLogger\Logger\Logger;
use EventLogger\Storage\SQLiteStorage;
use EventLogger\Storage\NullStorage;
use EventLogger\Logger\Collection\LoggerCollection;
// Initialise an SQLite database/table
$pdo = new \PDO('sqlite:my_event_log.sqlite');
$pdo->exec(sprintf("CREATE TABLE IF NOT EXISTS %s (
id INTEGER PRIMARY KEY,
type TEXT,
sub_type TEXT DEFAULT NULL,
target_type TEXT DEFAULT NULL,
target_id INTEGER DEFAULT 0,
message INTEGER DEFAULT NULL,
data TEXT DEFAULT NULL,
created TEXT DEFAULT '0000-00-00 00:00:00',
action TEXT DEFAULT NULL,
user TEXT DEFAULT NULL
)",SQLiteStorage::TABLE_NAME));
// Create a storage strategy
$sqliteStorage = new SQLiteStorage($pdo);
// Create another storage strategy
$nullStorage = new NullStorage();
// Create a logger
$logger1 = new Logger($sqliteStorage);
// Create another logger
$logger2 = new Logger($nullStorage);
// Create a logger collection and add your loggers
$collection = new LoggerCollection();
$collection->addLogger($logger1);
$collection->addLogger($logger2);
// Create an event
$event = new Event();
$event->setType('event');
$event->setSubType('pageview');
$event->setMessage('user [foo] viewed a page of interest to you');
$event->setData(array('[foo]' => 'bar'));
$event->setUser(2);
// Log the event
$collection->log($event);