| 
									
										
										
										
											2021-08-25 18:46:29 +02:00
										 |  |  | //go:build go1.4 | 
					
						
							| 
									
										
										
										
											2017-02-20 17:39:36 +02:00
										 |  |  | // +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) | 
					
						
							|  |  |  | } |