github.com/m3shine/gochain@v2.2.26+incompatible/log/handler_go14.go (about) 1 // +build go1.4 2 3 package log 4 5 import "sync/atomic" 6 7 // swapHandler wraps another handler that may be swapped out 8 // dynamically at runtime in a thread-safe fashion. 9 type swapHandler struct { 10 handler atomic.Value 11 } 12 13 func (h *swapHandler) Log(r *Record) error { 14 return (*h.handler.Load().(*Handler)).Log(r) 15 } 16 17 func (h *swapHandler) IsLogging(level Lvl) bool { 18 return h.Get().IsLogging(level) 19 } 20 21 func (h *swapHandler) Swap(newHandler Handler) { 22 h.handler.Store(&newHandler) 23 } 24 25 func (h *swapHandler) Get() Handler { 26 return *h.handler.Load().(*Handler) 27 }