| | |
| | | |
| | | var ( |
| | | opChan chan *OperationLog |
| | | schedualeChan chan *ScheduleLog |
| | | logger *Log |
| | | ProcName string |
| | | ProcID string |
| | | ) |
| | | |
| | | |
| | | func Init(flogWriter LogReportCallback, log *Log, procId string, procName string, wg *sync.WaitGroup, done chan struct{}) bool { |
| | | opChan = make(chan *OperationLog, 100) |
| | | schedualeChan = make(chan *ScheduleLog) |
| | | |
| | | if nil != log { |
| | | logger = log |
| | | } else { |
| | | logger = &Log{} |
| | | } |
| | | |
| | | //ProcName = procName |
| | | //ProcID = procId |
| | | ProcName = procName |
| | | ProcID = procId |
| | | |
| | | go saveLoop(flogWriter, wg, done) |
| | | |
| | |
| | | if nil == log { |
| | | return |
| | | } |
| | | |
| | | log.ProcName = ProcName |
| | | log.ProcID = ProcID |
| | | |
| | | select { |
| | | case opChan <- log: |
| | |
| | | } |
| | | } |
| | | |
| | | func SaveScheduleLog(category, level int, timeout time.Duration, msg string) { |
| | | func SaveScheduleLog(category, level int, timeout time.Duration, v ...interface{}) { |
| | | msg := "" |
| | | if len(v) > 0 { |
| | | msg = fmt.Sprint(v...) |
| | | } |
| | | |
| | | if msg == "" { |
| | | retrun |
| | | } |
| | | |
| | | log := &ScheduleLog{ |
| | | Timestamp: time.Now().Unix(), |
| | | ProcName: ProcName, |
| | | ProcID: ProcID, |
| | | Level: level, |
| | | Type: category, |
| | | Info: msg, |
| | | } |
| | | |
| | | select { |
| | | case schedualeChan <- log: |
| | | return |
| | | case <-time.After(timeout): |
| | | var info string |
| | | b, err := json.Marshal(log) |
| | | if nil == err { |
| | | info = string(b) |
| | | } |
| | | logger.Fatal("SaveScheduleLog failed to save log", info) |
| | | } |
| | | } |
| | | |