kabudu/event-logger

事件记录器是一个基于PHP的事件记录器库,它可以轻松地在您的Web应用程序中收集和查询基于用户或系统操作的事件。

v1.1.1 2017-06-29 21:23 UTC

This package is not auto-updated.

Last update: 2024-09-20 21:00:06 UTC


README

Build Status Coverage Status

事件记录器是一个基于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);