1. 重写logs
2. logs增加单测 3. task更换新的log实例 4. 配置文件增加日志相关配置
This commit is contained in:
@@ -5,7 +5,6 @@ package task
|
||||
import (
|
||||
"container/heap"
|
||||
"context"
|
||||
"fmt"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
@@ -47,14 +46,14 @@ type TaskQueue struct {
|
||||
logger *logs.Logger
|
||||
}
|
||||
|
||||
// NewTaskQueue 创建并返回一个新的任务队列实例
|
||||
func NewTaskQueue() *TaskQueue {
|
||||
// NewTaskQueue 创建并返回一个新的任务队列实例。
|
||||
func NewTaskQueue(logger *logs.Logger) *TaskQueue {
|
||||
pq := make(priorityQueue, 0)
|
||||
heap.Init(&pq)
|
||||
|
||||
return &TaskQueue{
|
||||
queue: &pq,
|
||||
logger: logs.NewLogger(),
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,7 +67,7 @@ func (tq *TaskQueue) AddTask(task Task) {
|
||||
priority: task.GetPriority(),
|
||||
}
|
||||
heap.Push(tq.queue, item)
|
||||
tq.logger.Info("任务已添加到队列: " + task.GetID())
|
||||
tq.logger.Infow("任务已添加到队列", "taskID", task.GetID())
|
||||
}
|
||||
|
||||
// GetNextTask 获取下一个要执行的任务(优先级最高的任务)
|
||||
@@ -80,9 +79,8 @@ func (tq *TaskQueue) GetNextTask() Task {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 获取优先级最高的任务
|
||||
item := heap.Pop(tq.queue).(*taskItem)
|
||||
tq.logger.Info("从队列中获取任务: " + item.task.GetID())
|
||||
tq.logger.Infow("从队列中获取任务", "taskID", item.task.GetID())
|
||||
return item.task
|
||||
}
|
||||
|
||||
@@ -99,7 +97,6 @@ type priorityQueue []*taskItem
|
||||
|
||||
func (pq priorityQueue) Len() int { return len(pq) }
|
||||
|
||||
// Less 优先级小的优先级更高
|
||||
func (pq priorityQueue) Less(i, j int) bool {
|
||||
return pq[i].priority < pq[j].priority
|
||||
}
|
||||
@@ -148,22 +145,22 @@ type Executor struct {
|
||||
logger *logs.Logger
|
||||
}
|
||||
|
||||
// NewExecutor 创建并返回一个新的任务执行器实例
|
||||
func NewExecutor(workers int) *Executor {
|
||||
// NewExecutor 创建并返回一个新的任务执行器实例。
|
||||
func NewExecutor(workers int, logger *logs.Logger) *Executor {
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
|
||||
return &Executor{
|
||||
taskQueue: NewTaskQueue(),
|
||||
taskQueue: NewTaskQueue(logger), // 将 logger 传递给 TaskQueue
|
||||
workers: workers,
|
||||
ctx: ctx,
|
||||
cancel: cancel,
|
||||
logger: logs.NewLogger(),
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
// Start 启动任务执行器
|
||||
func (e *Executor) Start() {
|
||||
e.logger.Info(fmt.Sprintf("正在启动任务执行器,工作协程数: %d", e.workers))
|
||||
e.logger.Infow("正在启动任务执行器", "workers", e.workers)
|
||||
|
||||
// 启动工作协程
|
||||
for i := 0; i < e.workers; i++ {
|
||||
@@ -190,31 +187,31 @@ func (e *Executor) Stop() {
|
||||
// SubmitTask 提交任务到执行器
|
||||
func (e *Executor) SubmitTask(task Task) {
|
||||
e.taskQueue.AddTask(task)
|
||||
e.logger.Info("任务已提交: " + task.GetID())
|
||||
e.logger.Infow("任务已提交", "taskID", task.GetID())
|
||||
}
|
||||
|
||||
// worker 工作协程
|
||||
func (e *Executor) worker(id int) {
|
||||
defer e.wg.Done()
|
||||
|
||||
e.logger.Info(fmt.Sprintf("工作协程(id = %d)已启动", id))
|
||||
e.logger.Infow("工作协程已启动", "workerID", id)
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-e.ctx.Done():
|
||||
e.logger.Info(fmt.Sprintf("工作协程 %d 已停止", id))
|
||||
e.logger.Infow("工作协程已停止", "workerID", id)
|
||||
return
|
||||
default:
|
||||
// 获取下一个任务
|
||||
task := e.taskQueue.GetNextTask()
|
||||
if task != nil {
|
||||
e.logger.Info(fmt.Sprintf("工作协程 %d 正在执行任务: %s", id, task.GetID()))
|
||||
e.logger.Infow("工作协程正在执行任务", "workerID", id, "taskID", task.GetID())
|
||||
|
||||
// 执行任务
|
||||
if err := task.Execute(); err != nil {
|
||||
e.logger.Error("任务执行失败: " + task.GetID() + ", 错误: " + err.Error())
|
||||
e.logger.Errorw("任务执行失败", "workerID", id, "taskID", task.GetID(), "error", err)
|
||||
} else {
|
||||
e.logger.Info("任务执行成功: " + task.GetID())
|
||||
e.logger.Infow("任务执行成功", "workerID", id, "taskID", task.GetID())
|
||||
}
|
||||
} else {
|
||||
// 没有任务时短暂休眠
|
||||
|
||||
Reference in New Issue
Block a user