910ccdb092
Bumps [github.com/hashicorp/terraform-plugin-sdk/v2](https://github.com/hashicorp/terraform-plugin-sdk) from 2.26.1 to 2.27.0. - [Release notes](https://github.com/hashicorp/terraform-plugin-sdk/releases) - [Changelog](https://github.com/hashicorp/terraform-plugin-sdk/blob/main/CHANGELOG.md) - [Commits](https://github.com/hashicorp/terraform-plugin-sdk/compare/v2.26.1...v2.27.0) --- updated-dependencies: - dependency-name: github.com/hashicorp/terraform-plugin-sdk/v2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
82 lines
2.8 KiB
Go
82 lines
2.8 KiB
Go
package tfsdklog
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/hashicorp/go-hclog"
|
|
)
|
|
|
|
var (
|
|
// rootLevel stores the effective level of the root SDK logger during
|
|
// NewRootSDKLogger where the value is deterministically chosen based on
|
|
// environment variables, etc. This call generally happens with each new
|
|
// provider RPC request. If the environment variable values changed during
|
|
// runtime between calls, then inflight provider requests checking this
|
|
// value would receive the most up-to-date value which would potentially
|
|
// differ with the actual in-context logger level. This tradeoff would only
|
|
// effect the inflight requests and should not be an overall performance
|
|
// concern in the case of this level causing more context checks until the
|
|
// request is over.
|
|
rootLevel hclog.Level = hclog.NoLevel
|
|
|
|
// rootLevelMutex is a read-write mutex that protects rootLevel from
|
|
// triggering the data race detector.
|
|
rootLevelMutex = sync.RWMutex{}
|
|
|
|
// subsystemLevels stores the effective level of all subsystem SDK loggers
|
|
// during NewSubsystem where the value is deterministically chosen based on
|
|
// environment variables, etc. This call generally happens with each new
|
|
// provider RPC request. If the environment variable values changed during
|
|
// runtime between calls, then inflight provider requests checking this
|
|
// value would receive the most up-to-date value which would potentially
|
|
// differ with the actual in-context logger level. This tradeoff would only
|
|
// effect the inflight requests and should not be an overall performance
|
|
// concern in the case of this level causing more context checks until the
|
|
// request is over.
|
|
subsystemLevels map[string]hclog.Level = make(map[string]hclog.Level)
|
|
|
|
// subsystemLevelsMutex is a read-write mutex that protects the
|
|
// subsystemLevels map from concurrent read and write panics.
|
|
subsystemLevelsMutex = sync.RWMutex{}
|
|
)
|
|
|
|
// subsystemWouldLog returns true if the subsystem SDK logger would emit a log
|
|
// at the given level. This is performed outside the context-based logger for
|
|
// performance.
|
|
func subsystemWouldLog(subsystem string, level hclog.Level) bool {
|
|
subsystemLevelsMutex.RLock()
|
|
|
|
setLevel, ok := subsystemLevels[subsystem]
|
|
|
|
subsystemLevelsMutex.RUnlock()
|
|
|
|
if !ok {
|
|
return false
|
|
}
|
|
|
|
return wouldLog(setLevel, level)
|
|
}
|
|
|
|
// rootWouldLog returns true if the root SDK logger would emit a log at the
|
|
// given level. This is performed outside the context-based logger for
|
|
// performance.
|
|
func rootWouldLog(level hclog.Level) bool {
|
|
rootLevelMutex.RLock()
|
|
|
|
setLevel := rootLevel
|
|
|
|
rootLevelMutex.RUnlock()
|
|
|
|
return wouldLog(setLevel, level)
|
|
}
|
|
|
|
// wouldLog returns true if the set level would emit a log at the given
|
|
// level. This is performed outside the context-based logger for performance.
|
|
func wouldLog(setLevel, checkLevel hclog.Level) bool {
|
|
if checkLevel == hclog.Off {
|
|
return false
|
|
}
|
|
|
|
return checkLevel >= setLevel
|
|
}
|