2022-08-06 14:21:18 +00:00
package logging
import (
"context"
"github.com/hashicorp/go-hclog"
)
// GetSDKRootLogger returns the root logger used for writing logs from an SDK.
// If no root logger has been created, it will return nil.
func GetSDKRootLogger ( ctx context . Context ) hclog . Logger {
logger := ctx . Value ( SDKRootLoggerKey )
if logger == nil {
return nil
}
2023-03-20 20:25:53 +00:00
hclogger , ok := logger . ( hclog . Logger )
if ! ok {
return nil
}
return hclogger
2022-08-06 14:21:18 +00:00
}
// GetSDKRootLoggerOptions returns the root logger options used for
// creating the root SDK logger. If the root logger has not been created or
// the options are not present, it will return nil.
func GetSDKRootLoggerOptions ( ctx context . Context ) * hclog . LoggerOptions {
if GetSDKRootLogger ( ctx ) == nil {
return nil
}
loggerOptionsRaw := ctx . Value ( SDKRootLoggerOptionsKey )
if loggerOptionsRaw == nil {
return nil
}
loggerOptions , ok := loggerOptionsRaw . ( * hclog . LoggerOptions )
if ! ok {
return nil
}
return loggerOptions
}
// SetSDKRootLogger sets `logger` as the root logger used for writing logs from
// an SDK.
func SetSDKRootLogger ( ctx context . Context , logger hclog . Logger ) context . Context {
return context . WithValue ( ctx , SDKRootLoggerKey , logger )
}
// SetSDKRootLoggerOptions sets `loggerOptions` as the root logger options
// used for creating the SDK root logger.
func SetSDKRootLoggerOptions ( ctx context . Context , loggerOptions * hclog . LoggerOptions ) context . Context {
return context . WithValue ( ctx , SDKRootLoggerOptionsKey , loggerOptions )
}
// GetSDKRootTFLoggerOpts retrieves the LoggerOpts of the SDK root logger.
// The value is stored in the context.Context: if none is found, a new one will be created.
func GetSDKRootTFLoggerOpts ( ctx context . Context ) LoggerOpts {
lOpts , ok := ctx . Value ( sdkRootTFLoggerOptsKey ( ) ) . ( LoggerOpts )
if ! ok {
lOpts = LoggerOpts { }
}
return lOpts
}
// SetSDKRootTFLoggerOpts sets the LoggerOpts of the SDK root logger, in the context.
func SetSDKRootTFLoggerOpts ( ctx context . Context , lOpts LoggerOpts ) context . Context {
return context . WithValue ( ctx , sdkRootTFLoggerOptsKey ( ) , lOpts )
}
// NewSDKSubsystemLoggerWarning is the text included in log output when a
// subsystem is auto-generated by terraform-plugin-log because it was used
// before the SDK instantiated it.
const NewSDKSubsystemLoggerWarning = "This log was generated by an SDK subsystem logger that wasn't created before being used. Use tflog.NewSubsystem to create this logger before it is used."
// GetSDKSubsystemLogger returns the subsystem logger for the named subsystem
// in SDK space. If no such subsystem logger has been created, it will return
// nil.
func GetSDKSubsystemLogger ( ctx context . Context , subsystem string ) hclog . Logger {
logger := ctx . Value ( sdkSubsystemLoggerKey ( subsystem ) )
if logger == nil {
return nil
}
2023-03-20 20:25:53 +00:00
hclogger , ok := logger . ( hclog . Logger )
if ! ok {
return nil
}
return hclogger
2022-08-06 14:21:18 +00:00
}
// SetSDKSubsystemLogger sets `logger` as the logger for the named subsystem in
// SDK space.
func SetSDKSubsystemLogger ( ctx context . Context , subsystem string , logger hclog . Logger ) context . Context {
return context . WithValue ( ctx , sdkSubsystemLoggerKey ( subsystem ) , logger )
}
// GetSDKSubsystemTFLoggerOpts retrieves the LoggerOpts of the logger for the named SDK subsystem.
// The value is stored in the context.Context: if none is found, a new one will be created.
func GetSDKSubsystemTFLoggerOpts ( ctx context . Context , subsystem string ) LoggerOpts {
lOpts , ok := ctx . Value ( sdkSubsystemTFLoggerOptsKey ( subsystem ) ) . ( LoggerOpts )
if ! ok {
lOpts = LoggerOpts { }
}
return lOpts
}
// SetSDKSubsystemTFLoggerOpts sets the LoggerOpts of the logger for the named SDK subsystem, in the context.
func SetSDKSubsystemTFLoggerOpts ( ctx context . Context , subsystem string , lOpts LoggerOpts ) context . Context {
return context . WithValue ( ctx , sdkSubsystemTFLoggerOptsKey ( subsystem ) , lOpts )
}