| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- <?php
- namespace app\common\utils;
- use think\facade\Log;
- use think\console\Output;
- /**
- * 队列日志工具类
- * 提供统一的队列任务日志记录功能
- */
- class QueueLogger
- {
- /**
- * 记录队列任务开始日志
- *
- * @param string $jobName 任务名称
- * @param mixed $job 任务对象
- * @param array $data 任务数据
- */
- public static function start($jobName, $job, $data)
- {
- $logData = [
- 'job_id' => method_exists($job, 'getJobId') ? $job->getJobId() : 'unknown',
- 'data' => $data,
- 'attempts' => method_exists($job, 'attempts') ? $job->attempts() : 0,
- 'start_time' => date('Y-m-d H:i:s')
- ];
-
- Log::channel('queue')->info("{$jobName}任务开始执行", $logData);
- self::outputToCli("{$jobName}任务开始执行", $logData);
- }
- /**
- * 记录队列任务成功日志
- *
- * @param string $jobName 任务名称
- * @param mixed $job 任务对象
- * @param array $data 任务数据
- * @param mixed $result 执行结果
- */
- public static function success($jobName, $job, $data, $result = null)
- {
- $logData = [
- 'job_id' => method_exists($job, 'getJobId') ? $job->getJobId() : 'unknown',
- 'data' => $data,
- 'result' => $result,
- 'end_time' => date('Y-m-d H:i:s')
- ];
-
- Log::channel('queue')->info("{$jobName}任务执行成功", $logData);
- self::outputToCli("{$jobName}任务执行成功", $logData);
- }
- /**
- * 记录队列任务警告日志
- *
- * @param string $jobName 任务名称
- * @param mixed $job 任务对象
- * @param array $data 任务数据
- * @param string $message 警告信息
- */
- public static function warning($jobName, $job, $data, $message)
- {
- $logData = [
- 'job_id' => method_exists($job, 'getJobId') ? $job->getJobId() : 'unknown',
- 'data' => $data,
- 'attempts' => method_exists($job, 'attempts') ? $job->attempts() : 0
- ];
-
- Log::channel('queue')->warning("{$jobName}任务警告: {$message}", $logData);
- self::outputToCli("{$jobName}任务警告: {$message}", $logData, 'warning');
- }
- /**
- * 记录队列任务异常日志
- *
- * @param string $jobName 任务名称
- * @param mixed $job 任务对象
- * @param array $data 任务数据
- * @param \Exception $e 异常对象
- */
- public static function error($jobName, $job, $data, \Exception $e)
- {
- $logData = [
- 'data' => $data,
- 'error_message' => $e->getMessage(),
- 'error_file' => $e->getFile(),
- 'error_line' => $e->getLine(),
- 'error_trace' => $e->getTraceAsString()
- ];
-
- // 安全地获取job信息,避免方法不存在导致的错误
- if (is_object($job)) {
- if (method_exists($job, 'getJobId')) {
- $logData['job_id'] = $job->getJobId();
- }
- if (method_exists($job, 'attempts')) {
- $logData['attempts'] = $job->attempts();
- }
- }
-
- Log::channel('queue')->error("{$jobName}任务执行异常", $logData);
- self::outputToCli("{$jobName}任务执行异常: " . $e->getMessage(), $logData, 'error');
- }
- /**
- * 记录队列任务失败日志
- *
- * @param string $jobName 任务名称
- * @param array $data 任务数据
- * @param string $message 失败信息
- */
- public static function failed($jobName, $data, $message = '任务进入失败状态,需要手动处理')
- {
- $logData = [
- 'data' => $data,
- 'failed_time' => date('Y-m-d H:i:s'),
- 'message' => $message
- ];
-
- Log::channel('queue')->error("{$jobName}任务失败", $logData);
- self::outputToCli("{$jobName}任务失败: {$message}", $logData, 'error');
- }
- /**
- * 记录队列任务结束日志
- *
- * @param string $jobName 任务名称
- * @param mixed $job 任务对象
- * @param array $data 任务数据
- */
- public static function end($jobName, $job, $data)
- {
- $logData = [
- 'job_id' => method_exists($job, 'getJobId') ? $job->getJobId() : 'unknown',
- 'data' => $data,
- 'end_time' => date('Y-m-d H:i:s')
- ];
-
- Log::channel('queue')->info("{$jobName}任务执行结束", $logData);
- self::outputToCli("{$jobName}任务执行结束", $logData);
- }
- /**
- * 记录业务执行开始日志
- *
- * @param string $businessName 业务名称
- * @param array $data 业务数据
- */
- public static function businessStart($businessName, $data)
- {
- $logData = [
- 'data' => $data,
- 'start_time' => date('Y-m-d H:i:s')
- ];
-
- Log::channel('queue')->info("开始执行{$businessName}业务", $logData);
- self::outputToCli("开始执行{$businessName}业务", $logData);
- }
- /**
- * 记录队列任务信息日志
- *
- * @param string $message 日志信息
- * @param array $context 上下文数据
- */
- public static function info($message, array $context = [])
- {
- Log::channel('queue')->info($message, $context);
- self::outputToCli($message, $context);
- }
- /**
- * 输出到CLI命令行
- *
- * @param string $message 消息内容
- * @param array $context 上下文数据
- * @param string $level 日志级别
- */
- private static function outputToCli($message, $context = [], $level = 'info')
- {
- if (PHP_SAPI === 'cli') {
- $output = new Output();
- $timestamp = date('Y-m-d H:i:s');
-
- switch ($level) {
- case 'error':
- $prefix = 'ERROR';
- $output->error("[{$timestamp}] [{$prefix}] {$message}");
- break;
- case 'warning':
- $prefix = 'WARN';
- $output->warning("[{$timestamp}] [{$prefix}] {$message}");
- break;
- default:
- $prefix = 'INFO';
- $output->info("[{$timestamp}] [{$prefix}] {$message}");
- }
- }
- }
- }
|