github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/log/context/log_id.go (about)

     1  package context
     2  
     3  import (
     4  	"runtime"
     5  	"sync"
     6  )
     7  
     8  var (
     9  	logIDs = map[int64]string{}
    10  	locker = sync.RWMutex{}
    11  )
    12  
    13  func getGoID() int64 {
    14  	return runtime.GoID()
    15  }
    16  
    17  func SetLogID(id string) {
    18  	locker.Lock()
    19  	defer locker.Unlock()
    20  
    21  	logIDs[getGoID()] = id
    22  }
    23  
    24  func GetLogID() string {
    25  	locker.RLock()
    26  	defer locker.RUnlock()
    27  
    28  	goID := getGoID()
    29  
    30  	if logID, ok := logIDs[goID]; ok {
    31  		return logID
    32  	}
    33  
    34  	return ""
    35  }
    36  
    37  func Close() {
    38  	locker.Lock()
    39  	defer locker.Unlock()
    40  
    41  	goID := getGoID()
    42  
    43  	if _, ok := logIDs[goID]; ok {
    44  		delete(logIDs, goID)
    45  	}
    46  }