1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
package logutil
import (
"io"
"strings"
"github.com/sirupsen/logrus"
)
func NewFilter(levels []logrus.Level, filters ...string) logrus.Hook {
dl := logrus.New()
dl.SetOutput(io.Discard)
return &logsFilter{
levels: levels,
filters: filters,
discardLogger: dl,
}
}
type logsFilter struct {
levels []logrus.Level
filters []string
discardLogger *logrus.Logger
}
func (d *logsFilter) Levels() []logrus.Level {
return d.levels
}
func (d *logsFilter) Fire(entry *logrus.Entry) error {
for _, f := range d.filters {
if strings.Contains(entry.Message, f) {
entry.Logger = d.discardLogger
return nil
}
}
return nil
}
|