aboutsummaryrefslogtreecommitdiffstats
path: root/log/handler_go14.go
diff options
context:
space:
mode:
Diffstat (limited to 'log/handler_go14.go')
-rw-r--r--log/handler_go14.go23
1 files changed, 23 insertions, 0 deletions
diff --git a/log/handler_go14.go b/log/handler_go14.go
new file mode 100644
index 000000000..05dedbf2a
--- /dev/null
+++ b/log/handler_go14.go
@@ -0,0 +1,23 @@
+// +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)
+}