github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/log/handler_go13.go (about)

     1  
     2  //<developer>
     3  //    <name>linapex 曹一峰</name>
     4  //    <email>linapex@163.com</email>
     5  //    <wx>superexc</wx>
     6  //    <qqgroup>128148617</qqgroup>
     7  //    <url>https://jsq.ink</url>
     8  //    <role>pku engineer</role>
     9  //    <date>2019-03-16 19:16:39</date>
    10  //</624450097773547520>
    11  
    12  //+建设!GO1.4
    13  
    14  package log
    15  
    16  import (
    17  	"sync/atomic"
    18  	"unsafe"
    19  )
    20  
    21  //swaphandler包装了另一个可以换出的处理程序
    22  //在运行时以线程安全的方式动态运行。
    23  type swapHandler struct {
    24  	handler unsafe.Pointer
    25  }
    26  
    27  func (h *swapHandler) Log(r *Record) error {
    28  	return h.Get().Log(r)
    29  }
    30  
    31  func (h *swapHandler) Get() Handler {
    32  	return *(*Handler)(atomic.LoadPointer(&h.handler))
    33  }
    34  
    35  func (h *swapHandler) Swap(newHandler Handler) {
    36  	atomic.StorePointer(&h.handler, unsafe.Pointer(&newHandler))
    37  }
    38