thunderwolf / sf-task-logger-plugin
symfony 1.x 任务日志插件 - 允许您运行任务并将结果存储在数据库和/或日志文件中。
Requires
This package is not auto-updated.
Last update: 2022-02-16 23:38:46 UTC
README
sfTaskLoggerPlugin 允许您运行自定义任务并存储结果。结果存储在特定表中的数据库中,以及/或日志文件中。每个任务都有其自己的日志文件,根据其命名空间和名称存储在特定目录中。(/log/tasks/:TASK_NAMESPACE/:TASK_NAME
)。它允许您记录所有由您的 symfony 项目执行的 CRON 任务干净的日志历史。
数据库记录存储以下信息
- 任务名称
- 任务参数列表
- 任务选项列表
- 处理记录数
- 未处理记录数
- 标志,表示任务是否正在运行
- 无错误完全处理的最后一个记录 ID
- 处理开始时间
- 处理结束时间
- 标志,表示任务是否无错误完成
- 任务成功或失败的错误代码
- 任务的完整控制台输出(可选)
- 与任务关联的日志文件路径
- 关于任务及其结果的额外管理员评论(可以通过管理员生成模块进行修改)
插件基本任务具有几个有用的选项
config
:插件使用的 YAML 配置(在下一节中解释)check-running
:检查任务当前是否未运行only-processed
:只有在任务处理了一些东西时才记录到日志或数据库中once-by-day
:检查任务今天是否已经执行过一次
注意 该插件同时与 Doctrine 和 Propel 兼容,如果您使用 Doctrine,将使用
/lib/config/doctrine/schema.yml
,而使用 Propel 将使用/lib/config/schema.yml
。(抱歉,我没有使用最新的 1.4 包测试 Propel 版本,如果您使用它与 Propel 一起使用,请随时向我报告问题。管理员生成模块也不可用。)
安装
-
安装插件
$ symfony plugin:install sfTaskLoggerPlugin
(下载并解压到您的
/plugins
目录或使用 svnhttp://svn.symfony-project.com/plugins/sfTaskLoggerPlugin/tags/sfTaskLoggerPlugin_1_0_4/
) -
构建新的插件表和相关模型
$ ./symfony doctrine:build --all-classes --db --and-load --env=dev
(或单独启动每个 "构建" 任务)
或者对于 Propel
$ symfony propel:build-all-load
注意 在此阶段,您应该有
- 在您的数据库中有一个名为
tl_tasks
的新表- 在
lib/model/sfTaskLoggerPlugin
或lib/model/doctrine/sfTaskLoggerPlugin
中的新模型类集
-
清除您的缓存
$ symfony cc
配置
插件附带一个名为 base 的任务类,其名称为 sfBaseTaskLoggerTask
。因此,您的任务必须扩展此类。由于任务级别没有自动加载,必须手动包含它。
[php]
require_once(dirname(__FILE__). '/sfBaseTaskLoggerTask.class.php');
注意 当然,您需要根据任务的位置更改此路径。例如,如果它在项目的
/lib/task
文件夹中,请使用以下代码。通常,您会希望使用自定义项目任务扩展所有任务,以便它们都能从中受益于其通用方法、参数或选项(因此,它必须保持抽象)。它看起来像这样
[php]
/**
* This the base task for all tasks of myProject.
*
* @author COil
* @since 01/09/2010
*/
require_once(dirname(__FILE__). '/../../plugins/sfTaskLoggerPlugin/lib/task/sfBaseTaskLoggerTask.class.php');
abstract class mySuperBaseTask extends sfBaseTaskLoggerTask
{
/**
* This function is callable by all the project tasks.
*/
public function superFunction()
{
}
}
您的最终任务应继承此自定义任务,如下所示
[php]
/**
* This a custom task
*
* @author Vernet Loïc aka COil <qrf_coil]at[yahoo[dot]fr>
* @since 1.0.0 - 7 aug 2009
*/
class sfMyTask extends mySuperBaseTask
{
// check the following section for functions to implement
}
此外,此插件附带一个 默认 YAML 配置文件,此文件允许您指定是否要记录到数据库、文件或两者都记录
-
将
/plugins/sfTaskLoggerPlugin/config/plugin_sftl.yml
复制到您的应用程序的config
文件夹。然后此文件将被使用。 -
现在,您可以添加自己的配置。(复制粘贴默认配置并重命名配置键)您应该保留
default
项,这是插件提供的基本配置。 -
要为特定任务使用特定配置,请将
config
选项传递给任务。(--config=myConfig),其中myConfig
是您的配置键。如果配置无效,将引发警报。
使用方法
在您的任务(如上面的 sfMyTask
)中
-
1 - 实现与标准任务相同的
configure()
方法:(不要忘记调用父方法以包含通用参数和选项)[php] /** * Main task configuration. */ protected function configure() { parent::configure(); $this->addArguments(array( new sfCommandArgument('arg_1', sfCommandArgument::OPTIONAL, 'Test argument 1', 'arg_1_value'), new sfCommandArgument('arg_2', sfCommandArgument::OPTIONAL, 'Test argument 2', 'arg_2_value'), )); $this->namespace = 'sf_task_logger'; $this->name = 'sample'; $this->briefDescription = 'This is a sample task !'; $this->detailedDescription = <<<EOF The task [sf_task_logger:sample|INFO] doesn't do that much. It logs itself in the database and in the file system: [./symfony sf_task_logger:sample --env=prod|INFO] EOF; }
现在有两个具体方法需要实现
-
2 -
checkParameters()
(也不要忘记调用父方法)[php] /** * Advanced check of task parameters. */ protected function checkParameters($arguments = array(), $options = array()) { parent::checkParameters($arguments, $options); if ($this->args['arg_1'] != 'arg_1_value') { throw new InvalidArgumentException('The value for argument 1 is not valid ! Check the help of the task.'); } return true; }
注意 此方法可用于对任务参数或参数进行高级控制。如果有至少一个无效参数,则引发
InvalidArgumentException
。不要忘记首先调用父函数,以便在基本任务级别(或在您的项目基本任务级别)检查通用参数。(或您的项目基本任务级别)
-
4 -
doProcess()
[php] /** * Main task process. */ protected function doProcess($arguments = array(), $options = array()) { try { $this->printAndLog(' - This is a log info !!'); $this->task->setErrorCode(self::ERROR_CODE_SUCCESS); $this->setOk(); } catch (Exception $e) { $this->task->setErrorCode(self::ERROR_CODE_FAILURE); $this->setNOk($e); } }
注意 这是您任务处理的主要方法。`$this->task` 是将要保存的数据库对象。如您所见,`setOk()` 和 `setNOk` 方法允许根据任务的成败自动设置状态标志。我们还设置了一个状态码,它将比成功或失败提供更多关于过程如何结束的详细信息。
如果您想从给定的 id 中恢复批处理过程,您可以使用 `last_id_processed` 字段来完成此操作。
最后,如果您想对任务过程有更多控制,也可以重新实现基类的 execute()
方法,该方法负责调用所有其他子函数
[php]
/**
* Global process of the task.
*
* @see sfTask
*/
protected function execute($arguments = array(), $options = array())
{
$this->createContext();
$this->config = $this->checkAndGetConfig($options['config']);
$this->checkConfig();
$this->setParameters($arguments, $options);
$this->initDatabaseManager();
$this->checkParameters($arguments, $options);
$this->initLogger();
$this->logStart();
$this->doProcess($arguments, $options);
$this->logEnd();
}
管理生成模块
此插件附带一个方便的管理生成模块(Doctrine、symfony >= 1.2),以便管理主要的 tl_task
表。
将模块 tl_task
添加到您的应用程序 settings.yml
文件的启用模块列表中。
enabled_modules: [default, tl_task]
生成插件的所有模型文件后,编辑 /lib/model/doctrine/sfTaskLoggerPlugin/tlTaskTable.class.php
类,使其扩展类 PlugintlTaskTableExtended
[php]
/**
* tlTaskTable
*
* This class has been auto-generated by the Doctrine ORM Framework
*/
class tlTaskTable extends PlugintlTaskTableExtended
{
/**
* Returns an instance of this class.
*
* @return object tlTaskTable
*/
public static function getInstance()
{
return Doctrine_Core::getTable('tlTask');
}
}
然后调用模块,you_backend.php/tl_task
!就这样!;)
注意 此插件为此管理生成模块提供了一条路由
tl_task
。
注意
注意 此插件捆绑了一个示例任务:`/lib/task/sfTaskLoggerSampleTask.class.php`,可以使用以下命令运行(将 "frontend" 替换为项目有效的应用程序名称,将 "dev" 替换为有效的环境)
> ./symfony task-logger:sample --application="frontend" --env="dev"
还有一个任务:`/lib/task/sfTaskLoggerPurgeRunningTask.class.php`,用于清除以致命错误结束并保持运行标志为 "ON" 的任务
> ./symfony task-logger:purge --task="myProject:myTask" --application=backend --env="dev"
控制台输出
在运行计划任务时,您可能希望禁用控制台输出,例如,由于某些服务器相关配置的问题 - 在这种情况下,请将 --quiet 选项添加到您的命令行
./symfony task-logger:sample --application=frontend --env="prod" --quiet
待办事项
- V1.1.0:高级功能以保持“已处理对象”的状态
- V1.0.5:测试Propel版本
支持
请给我发送电子邮件或在symfony TRAC上报告错误,如果您在symfony邮件列表上提问,我也可以回答。
变更日志
(检查变更日志选项卡)
再见。 COil :)
本插件由 SQL Technologies 赞助