Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于将项目添加到队列的链接方法_Php_Design Patterns_Laravel 4 - Fatal编程技术网

Php 用于将项目添加到队列的链接方法

Php 用于将项目添加到队列的链接方法,php,design-patterns,laravel-4,Php,Design Patterns,Laravel 4,我正在编写一个日志类,它有几种方法,如info、error或warning将日志条目插入数据库 到目前为止,这些方法中的每一种都直接进行了db插入。当涉及批处理时,这不是很好的性能。我现在想通过创建一个队列来解决这个问题,并且在任务结束时只生成并触发一个insert语句 我现在不确定以下是合理的还是良好的做法。我现在要做的是链接方法以启动和提交一个队列,如下所示: Log::queue()->info('Just something')->warning('squared stuff')->su

我正在编写一个日志类,它有几种方法,如
info
error
warning
将日志条目插入数据库

到目前为止,这些方法中的每一种都直接进行了db插入。当涉及批处理时,这不是很好的性能。我现在想通过创建一个队列来解决这个问题,并且在任务结束时只生成并触发一个insert语句

我现在不确定以下是合理的还是良好的做法。我现在要做的是链接方法以启动和提交一个队列,如下所示:

Log::queue()->info('Just something')->warning('squared stuff')->submit();
或者如果我不想直接插入它:

Log::info('justsomething');
例如,类结构如下所示:

类日志{
受保护的$queue=array();
受保护的$isQueued=false;
公共函数队列(){
$this->isQueued=true;
退还$this;
}
公共职能信息(){
如果($this->isQueued){
//添加到队列
}否则{
//在数据库中插入
}
退还$this;
}
//以下所有其他日志类型。。。
公共职能提交(){
//从队列生成单个insert语句并将其插入
}
}
我使用的是Laravel facade,因此是静态调用


这个设计有什么问题吗?我不确定,因为举例来说,
Log::submit()
本身毫无意义,但却是可能的。这有关系吗?

您可能应该做的是删除队列/提交方法,而不是获取传入日志并将它们存储在对象上的数组中,然后可以使用回调函数,如
App::shutdown(function(){…})
告诉它在应用程序完成请求服务后将内存中的日志字符串提交到数据库


同样值得一提的是,如果您不局限于使用SQL数据库,那么已经有几个用于Redis、Mongo等的现有数据库Monolog处理程序。底层的Monolog实例可以通过
Log::getMonolog()

App::shutdown
获得,这听起来很合理。我可以这样做。不幸的是,我无法找到一个适合我需要的日志解决方案。我需要将日志链接到sql数据库中的特定条目。你知道有什么能做到这一点吗?用你的话来说,听起来你最好自己去实现它。