我使用Silex框架开发此Web应用程序,我想在我的数据库(mysql)中存储不同的用户活动/事件,例如当用户登录,注销,创建内容,更新内容等时 此日志的目的是在某个特定日期返回并查看例如ID 2登录2次的用户,他创建了2个新xx并更新了3 xx。
对于我想要存储在数据库中的每个事件,我想要保存登录用户的userId,事件(字符串,例如登录)和事件的URL,例如https://mydomain.dev/login。但你怎么能回去呢?是的我在我的表上创建了一个名为created的字段,默认为CURRENT_TIMESTAMP。
我坚持在哪个方向创建这个Logger类。 此时,我有一个LoggerInterface,在这里我定义了一个静态日志函数。
interface LoggerInterface
{
public static function log(LogEvent $logEvent);
}
现在我的问题是,创建不同活动的最佳方式是什么。
创建一个抽象的LogEvent类,它包含日志事件的属性,如
abstract class LogEvent {
protected $type;
protected $url;
}
这样我可以为每个事件创建一个类,并在我的例子中定义我的类型。 LoginLogEvent类:
class LoginLogEvent extends LogEvent
{
protected $type = 'login';
}
我定义这样的类型的方式是一个好的方法,或者我应该创建一个常量文件,在那里我定义我想要跟踪的所有活动,例如。
class LogEvents
{
const LOGIN = "login";
}
然后在我的LoginLogEvent类中:
class LoginLogEvent extends LogEvent
{
protected $type = LogEvents::LOGIN;
}
我还可以沿着以下几行创建一个构造函数:
class LoginLogEvent extends LogEvent
{
protected $type;
protected $url;
public function __construct($type, $url){
$this->type= $type;
$this->url= $url;
}
}
好东西,但是当我想记录某些内容时...我可能会创建一个类似这样的LogHandler类:
class LogHandler implements LoggerInterface
{
public static function log(LogEvent $logEvent)
{
// TODO: Implement log() method.
}
}
然后我会在$ logEvent->类型上创建一个switch case,并基本上将事件的类型,url写入数据库。
谢谢你,周末愉快:)
答案 0 :(得分:0)
Silex已经支持Monolog以提供您需要的所有功能。您还可以添加WebProcessor
以向已记录的数据添加URL,IP等,其中包括从调试到关键和放大的各种级别。紧急状态。