예제 #1
0
파일: worker.go 프로젝트: webdeskltd/log
// Выбор бэкэндов из пула
// Отправка сообщений в зависимости от режима и уровня логирования
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
}
예제 #2
0
파일: writer.go 프로젝트: webdeskltd/log
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
}