public function run(GearmanJob $job, &$log) { set_error_handler('gearman_error_handler'); $workload = json_decode($job->workload(), true); try { $workload['method'] = empty($workload['method']) ? 'progress' : $workload['method']; Logger::info(__CLASS__ . '->' . $workload['method'] . ' got workload.', $workload); array_push($workload['payload'], $log); !($call_result = call_user_func_array([$this, $workload['method']], $workload['payload'])) && ($call_result = []); Logger::info('result of the ' . __CLASS__ . '->' . $workload['method'] . '.', $call_result); } catch (Exception $e) { Logger::emerg('class ' . __CLASS__ . ' throw exception:' . $e->getMessage(), $workload); } return GEARMAN_SUCCESS; }
function gearman_error_handler($err_no, $err_str, $err_file, $err_line) { $logger = Logger::withName('system'); $logger->error("code({$err_no}) {$err_file} + {$err_line}: {$err_str}"); }