github.com/kisexp/xdchain@v0.0.0-20211206025815-490d6b732aa7/log/handler_go13.go (about) 1 // +build !go1.4 2 3 package log 4 5 import ( 6 "sync/atomic" 7 "unsafe" 8 ) 9 10 // swapHandler wraps another handler that may be swapped out 11 // dynamically at runtime in a thread-safe fashion. 12 type swapHandler struct { 13 handler unsafe.Pointer 14 } 15 16 func (h *swapHandler) Log(r *Record) error { 17 return h.Get().Log(r) 18 } 19 20 func (h *swapHandler) Get() Handler { 21 return *(*Handler)(atomic.LoadPointer(&h.handler)) 22 } 23 24 func (h *swapHandler) Swap(newHandler Handler) { 25 atomic.StorePointer(&h.handler, unsafe.Pointer(&newHandler)) 26 }