// Copyright © 2016 Steve Francia <spf@spf13.com>. // // Use of this source code is governed by an MIT-style // license that can be found in the LICENSE file. package jwalterweatherman import ( "sync/atomic" ) type logCounter struct { counter uint64 } func (c *logCounter) incr() { atomic.AddUint64(&c.counter, 1) } func (c *logCounter) resetCounter() { atomic.StoreUint64(&c.counter, 0) } func (c *logCounter) getCount() uint64 { return atomic.LoadUint64(&c.counter) } func (c *logCounter) Write(p []byte) (n int, err error) { c.incr() return len(p), nil } // LogCountForLevel returns the number of log invocations for a given threshold. func (n *Notepad) LogCountForLevel(l Threshold) uint64 { return n.logCounters[l].getCount() } // LogCountForLevelsGreaterThanorEqualTo returns the number of log invocations // greater than or equal to a given threshold. func (n *Notepad) LogCountForLevelsGreaterThanorEqualTo(threshold Threshold) uint64 { var cnt uint64 for i := int(threshold); i < len(n.logCounters); i++ { cnt += n.LogCountForLevel(Threshold(i)) } return cnt } // ResetLogCounters resets the invocation counters for all levels. func (n *Notepad) ResetLogCounters() { for _, np := range n.logCounters { np.resetCounter() } }