// Выбор бэкэндов из пула // Отправка сообщений в зависимости от режима и уровня логирования func (self *Backends) shuffle(msg *m.Message) *m.Message { var item *list.Element var bck *Backend var pool []*Backend var i int var ok bool // Отбираем backend логгеры подходящие для уровня сообщения for item = self.Pool.Front(); item != nil; item = item.Next() { bck = item.Value.(*Backend) // Выбор по режиму ok = false switch bck.hMode { case MODE_NORMAL: if bck.hLevelNormal >= msg.Record.Level { ok = true } case MODE_SELECT: for i = range bck.hLevelSelect { if bck.hLevelSelect[i] == msg.Record.Level { ok = true } } } if ok { pool = append(pool, bck) } } // Если есть backend обработчики, то готовим сообщение if len(pool) > 0 { msg.Prepare() } for i = range pool { if pool[i].reader != nil { pool[i].reader(msg) } } // Устанавливаем длинну записанного сообщения msg.SetResult(len(msg.Record.Message), nil) return msg }
func (wr *Writer) write(buf string) (ln int, err error) { var msg *m.Message msg = m.NewMessage( t.NewTrace(). Trace(t.STEP_BACK + 3). GetRecord(). Resolver(wr.resolver), ). Level( l.NewFromMesssage(buf, wr.level).Level, ). Write(wr.cleanSpace(buf)) if wr.backends != nil { wr.backends.Push(msg) ln, err = msg.GetResult() } else { // backend is not initialized, no place to send messages } return }