Select Git revision
channels.go 1.78 KiB
package zap
import (
"git.perx.ru/perxis/perxis-go/pkg/data"
"go.uber.org/zap/zapcore"
)
const (
channelKey = "channel"
Syslog = "syslog"
Userlog = "userlog"
// ChannelsAll = "*"
)
func ContainsChannels(channels ...string) FilterFunc {
return func(entry zapcore.Entry, fields []zapcore.Field) bool {
for _, f := range fields {
if f.Key == channelKey && f.Type == zapcore.SkipType {
for _, v := range f.Interface.(stringArray) {
if data.Contains(v, channels) {
return true
}
}
}
}
return false
}
}
// WithDefaultChannel аналогичен WithChannel, но также устанавливает переданный канал в качестве канала по умолчанию.
// Это означает, что если поле Channels в записи не указано, запись все равно будет передана в zapcore.Core.
func WithDefaultChannel(core zapcore.Core, channel string) zapcore.Core {
return WithChannel(core, channel, true)
}
// WithChannel добавляет к переданному zapcore.Core фильтрацию записей по каналам.
// Это означает, что если запись содержит поле Channels и значение соответствует
// переданному каналу, то запись будет передана в zapcore.Core.
func WithChannel(core zapcore.Core, channel string, isDefault ...bool) zapcore.Core {
filterFn := ContainsChannels(channel)
if len(isDefault) > 0 && isDefault[0] {
filterFn = Or(filterFn, Not(ContainsKey(channelKey)))
}
return WithFilters(core, filterFn)
}
func WithChannels(core zapcore.Core, channels ...string) zapcore.Core {
filterFn := ContainsChannels(channels...)
return WithFilters(core, filterFn)
}