const _numLevels … const _countersPerLevel … type counter … type counters … func newCounters() *counters { … } func (cs *counters) get(lvl Level, key string) *counter { … } // fnv32a, adapted from "hash/fnv", but without a []byte(string) alloc func fnv32a(s string) uint32 { … } func (c *counter) IncCheckReset(t time.Time, tick time.Duration) uint64 { … } type SamplingDecision … const LogDropped … const LogSampled … type optionFunc … func (f optionFunc) apply(s *sampler) { … } type SamplerOption … // nopSamplingHook is the default hook used by sampler. func nopSamplingHook(Entry, SamplingDecision) { … } // SamplerHook registers a function which will be called when Sampler makes a // decision. // // This hook may be used to get visibility into the performance of the sampler. // For example, use it to track metrics of dropped versus sampled logs. // // var dropped atomic.Int64 // zapcore.SamplerHook(func(ent zapcore.Entry, dec zapcore.SamplingDecision) { // if dec&zapcore.LogDropped > 0 { // dropped.Inc() // } // }) func SamplerHook(hook func(entry Entry, dec SamplingDecision)) SamplerOption { … } // NewSamplerWithOptions creates a Core that samples incoming entries, which // caps the CPU and I/O load of logging while attempting to preserve a // representative subset of your logs. // // Zap samples by logging the first N entries with a given level and message // each tick. If more Entries with the same level and message are seen during // the same interval, every Mth message is logged and the rest are dropped. // // For example, // // core = NewSamplerWithOptions(core, time.Second, 10, 5) // // This will log the first 10 log entries with the same level and message // in a one second interval as-is. Following that, it will allow through // every 5th log entry with the same level and message in that interval. // // If thereafter is zero, the Core will drop all log entries after the first N // in that interval. // // Sampler can be configured to report sampling decisions with the SamplerHook // option. // // Keep in mind that Zap's sampling implementation is optimized for speed over // absolute precision; under load, each tick may be slightly over- or // under-sampled. func NewSamplerWithOptions(core Core, tick time.Duration, first, thereafter int, opts ...SamplerOption) Core { … } type sampler … var _ … var _ … // NewSampler creates a Core that samples incoming entries, which // caps the CPU and I/O load of logging while attempting to preserve a // representative subset of your logs. // // Zap samples by logging the first N entries with a given level and message // each tick. If more Entries with the same level and message are seen during // the same interval, every Mth message is logged and the rest are dropped. // // Keep in mind that zap's sampling implementation is optimized for speed over // absolute precision; under load, each tick may be slightly over- or // under-sampled. // // Deprecated: use NewSamplerWithOptions. func NewSampler(core Core, tick time.Duration, first, thereafter int) Core { … } func (s *sampler) Level() Level { … } func (s *sampler) With(fields []Field) Core { … } func (s *sampler) Check(ent Entry, ce *CheckedEntry) *CheckedEntry { … }