hclog.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package logger
  2. import (
  3. "io"
  4. "log"
  5. "github.com/hashicorp/go-hclog"
  6. "github.com/rs/zerolog"
  7. )
  8. // HCLogAdapter is an adapter for hclog.Logger
  9. type HCLogAdapter struct {
  10. hclog.Logger
  11. }
  12. // Log emits a message and key/value pairs at a provided log level
  13. func (l *HCLogAdapter) Log(level hclog.Level, msg string, args ...any) {
  14. var ev *zerolog.Event
  15. switch level {
  16. case hclog.Info:
  17. ev = logger.Info()
  18. case hclog.Warn:
  19. ev = logger.Warn()
  20. case hclog.Error:
  21. ev = logger.Error()
  22. default:
  23. ev = logger.Debug()
  24. }
  25. ev.Timestamp().Str("sender", l.Name())
  26. addKeysAndValues(ev, args...)
  27. ev.Msg(msg)
  28. }
  29. // Trace emits a message and key/value pairs at the TRACE level
  30. func (l *HCLogAdapter) Trace(msg string, args ...any) {
  31. l.Log(hclog.Debug, msg, args...)
  32. }
  33. // Debug emits a message and key/value pairs at the DEBUG level
  34. func (l *HCLogAdapter) Debug(msg string, args ...any) {
  35. l.Log(hclog.Debug, msg, args...)
  36. }
  37. // Info emits a message and key/value pairs at the INFO level
  38. func (l *HCLogAdapter) Info(msg string, args ...any) {
  39. l.Log(hclog.Info, msg, args...)
  40. }
  41. // Warn emits a message and key/value pairs at the WARN level
  42. func (l *HCLogAdapter) Warn(msg string, args ...any) {
  43. l.Log(hclog.Warn, msg, args...)
  44. }
  45. // Error emits a message and key/value pairs at the ERROR level
  46. func (l *HCLogAdapter) Error(msg string, args ...any) {
  47. l.Log(hclog.Error, msg, args...)
  48. }
  49. // With creates a sub-logger
  50. func (l *HCLogAdapter) With(args ...any) hclog.Logger {
  51. return &HCLogAdapter{Logger: l.Logger.With(args...)}
  52. }
  53. // Named creates a logger that will prepend the name string on the front of all messages
  54. func (l *HCLogAdapter) Named(name string) hclog.Logger {
  55. return &HCLogAdapter{Logger: l.Logger.Named(name)}
  56. }
  57. // StandardLogger returns a value that conforms to the stdlib log.Logger interface
  58. func (l *HCLogAdapter) StandardLogger(opts *hclog.StandardLoggerOptions) *log.Logger {
  59. return log.New(&StdLoggerWrapper{Sender: l.Name()}, "", 0)
  60. }
  61. // StandardWriter returns a value that conforms to io.Writer, which can be passed into log.SetOutput()
  62. func (l *HCLogAdapter) StandardWriter(opts *hclog.StandardLoggerOptions) io.Writer {
  63. return &StdLoggerWrapper{Sender: l.Name()}
  64. }