| 
									
										
										
										
											2023-05-09 19:19:48 +02:00
										 |  |  | // Copyright The OpenTelemetry Authors | 
					
						
							| 
									
										
										
										
											2024-04-11 11:46:18 +02:00
										 |  |  | // SPDX-License-Identifier: Apache-2.0 | 
					
						
							| 
									
										
										
										
											2023-05-09 19:19:48 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | package global // import "go.opentelemetry.io/otel/internal/global" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"log" | 
					
						
							|  |  |  | 	"os" | 
					
						
							|  |  |  | 	"sync/atomic" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/go-logr/logr" | 
					
						
							|  |  |  | 	"github.com/go-logr/stdr" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-11 11:46:18 +02:00
										 |  |  | // globalLogger holds a reference to the [logr.Logger] used within | 
					
						
							|  |  |  | // go.opentelemetry.io/otel. | 
					
						
							| 
									
										
										
										
											2023-05-09 19:19:48 +02:00
										 |  |  | // | 
					
						
							|  |  |  | // The default logger uses stdr which is backed by the standard `log.Logger` | 
					
						
							|  |  |  | // interface. This logger will only show messages at the Error Level. | 
					
						
							| 
									
										
										
										
											2024-04-11 11:46:18 +02:00
										 |  |  | var globalLogger = func() *atomic.Pointer[logr.Logger] { | 
					
						
							|  |  |  | 	l := stdr.New(log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile)) | 
					
						
							| 
									
										
										
										
											2023-05-09 19:19:48 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-11 11:46:18 +02:00
										 |  |  | 	p := new(atomic.Pointer[logr.Logger]) | 
					
						
							|  |  |  | 	p.Store(&l) | 
					
						
							|  |  |  | 	return p | 
					
						
							|  |  |  | }() | 
					
						
							| 
									
										
										
										
											2023-05-09 19:19:48 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-11 11:46:18 +02:00
										 |  |  | // SetLogger sets the global Logger to l. | 
					
						
							| 
									
										
										
										
											2023-05-09 19:19:48 +02:00
										 |  |  | // | 
					
						
							| 
									
										
										
										
											2023-06-05 10:15:05 +02:00
										 |  |  | // To see Warn messages use a logger with `l.V(1).Enabled() == true` | 
					
						
							|  |  |  | // To see Info messages use a logger with `l.V(4).Enabled() == true` | 
					
						
							|  |  |  | // To see Debug messages use a logger with `l.V(8).Enabled() == true`. | 
					
						
							| 
									
										
										
										
											2023-05-09 19:19:48 +02:00
										 |  |  | func SetLogger(l logr.Logger) { | 
					
						
							| 
									
										
										
										
											2023-09-07 13:20:37 +02:00
										 |  |  | 	globalLogger.Store(&l) | 
					
						
							| 
									
										
										
										
											2023-05-09 19:19:48 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-11 11:46:18 +02:00
										 |  |  | // GetLogger returns the global logger. | 
					
						
							|  |  |  | func GetLogger() logr.Logger { | 
					
						
							| 
									
										
										
										
											2023-09-07 13:20:37 +02:00
										 |  |  | 	return *globalLogger.Load() | 
					
						
							| 
									
										
										
										
											2023-05-09 19:19:48 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Info prints messages about the general state of the API or SDK. | 
					
						
							| 
									
										
										
										
											2023-06-05 10:15:05 +02:00
										 |  |  | // This should usually be less than 5 messages a minute. | 
					
						
							| 
									
										
										
										
											2023-05-09 19:19:48 +02:00
										 |  |  | func Info(msg string, keysAndValues ...interface{}) { | 
					
						
							| 
									
										
										
										
											2024-04-11 11:46:18 +02:00
										 |  |  | 	GetLogger().V(4).Info(msg, keysAndValues...) | 
					
						
							| 
									
										
										
										
											2023-05-09 19:19:48 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Error prints messages about exceptional states of the API or SDK. | 
					
						
							|  |  |  | func Error(err error, msg string, keysAndValues ...interface{}) { | 
					
						
							| 
									
										
										
										
											2024-04-11 11:46:18 +02:00
										 |  |  | 	GetLogger().Error(err, msg, keysAndValues...) | 
					
						
							| 
									
										
										
										
											2023-05-09 19:19:48 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Debug prints messages about all internal changes in the API or SDK. | 
					
						
							|  |  |  | func Debug(msg string, keysAndValues ...interface{}) { | 
					
						
							| 
									
										
										
										
											2024-04-11 11:46:18 +02:00
										 |  |  | 	GetLogger().V(8).Info(msg, keysAndValues...) | 
					
						
							| 
									
										
										
										
											2023-06-05 10:15:05 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Warn prints messages about warnings in the API or SDK. | 
					
						
							|  |  |  | // Not an error but is likely more important than an informational event. | 
					
						
							|  |  |  | func Warn(msg string, keysAndValues ...interface{}) { | 
					
						
							| 
									
										
										
										
											2024-04-11 11:46:18 +02:00
										 |  |  | 	GetLogger().V(1).Info(msg, keysAndValues...) | 
					
						
							| 
									
										
										
										
											2023-05-09 19:19:48 +02:00
										 |  |  | } |