terraform-provider-gitea/vendor/github.com/hashicorp/terraform-plugin-log/tfsdklog/levels.go
dependabot[bot] 910ccdb092
Bump github.com/hashicorp/terraform-plugin-sdk/v2 from 2.26.1 to 2.27.0
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>
2023-07-03 20:21:30 +00:00

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
}