24 lines
		
	
	
		
			469 B
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			24 lines
		
	
	
		
			469 B
		
	
	
	
		
			Go
		
	
	
	
	
	
|   | // +build go1.4 | ||
|  | 
 | ||
|  | package log | ||
|  | 
 | ||
|  | import "sync/atomic" | ||
|  | 
 | ||
|  | // swapHandler wraps another handler that may be swapped out | ||
|  | // dynamically at runtime in a thread-safe fashion. | ||
|  | type swapHandler struct { | ||
|  | 	handler atomic.Value | ||
|  | } | ||
|  | 
 | ||
|  | func (h *swapHandler) Log(r *Record) error { | ||
|  | 	return (*h.handler.Load().(*Handler)).Log(r) | ||
|  | } | ||
|  | 
 | ||
|  | func (h *swapHandler) Swap(newHandler Handler) { | ||
|  | 	h.handler.Store(&newHandler) | ||
|  | } | ||
|  | 
 | ||
|  | func (h *swapHandler) Get() Handler { | ||
|  | 	return *h.handler.Load().(*Handler) | ||
|  | } |