Skip to content
Snippets Groups Projects
Commit 37d31351 authored by Semyon Krestyaninov's avatar Semyon Krestyaninov
Browse files

feature: add filter_core.go

parent 083aaf1f
No related branches found
No related tags found
No related merge requests found
package zap
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
type FilterFunc func(entry zapcore.Entry, fields []zapcore.Field) bool
type filterCore struct {
zapcore.Core
filters []FilterFunc
fields []zap.Field
}
func NewFilterCore(core zapcore.Core, filters ...FilterFunc) zapcore.Core {
return &filterCore{
Core: core,
filters: filters,
}
}
func (core *filterCore) With(fields []zapcore.Field) zapcore.Core {
return &filterCore{
Core: core.Core.With(fields),
filters: core.filters,
fields: append(core.fields, fields...),
}
}
func (core *filterCore) Check(entry zapcore.Entry, checkedEntry *zapcore.CheckedEntry) *zapcore.CheckedEntry {
if core.Core.Enabled(entry.Level) {
return checkedEntry.AddCore(entry, core)
}
return checkedEntry
}
func (core *filterCore) Write(entry zapcore.Entry, fields []zapcore.Field) error {
if len(core.filters) > 0 {
fields = append(core.fields, fields...)
}
for _, filter := range core.filters {
if !filter(entry, fields) {
return nil
}
}
return core.Core.Write(entry, fields)
}
package zap
import (
"testing"
"github.com/stretchr/testify/require"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"go.uber.org/zap/zaptest/observer"
)
func TestFilterCore_Write(t *testing.T) {
core, logs := observer.New(zapcore.InfoLevel)
core = NewFilterCore(core, func(entry zapcore.Entry, fields []zapcore.Field) bool {
enc := zapcore.NewMapObjectEncoder()
for _, field := range fields {
field.AddTo(enc)
}
check, _ := enc.Fields["check"].(bool)
return check
})
logger := zap.New(core)
{
logger := logger.With(zap.Bool("check", true))
logger.Info("check true 1")
logger.Info("check true 2")
}
logger.Info("check false 1")
logger.Info("check false 2")
require.Equal(t, 2, logs.Len())
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment