github.com/hashicorp/vault/sdk@v0.11.0/helper/logging/logging.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 package logging 5 6 import ( 7 "fmt" 8 "io" 9 "os" 10 "strings" 11 12 log "github.com/hashicorp/go-hclog" 13 ) 14 15 type LogFormat int 16 17 const ( 18 UnspecifiedFormat LogFormat = iota 19 StandardFormat 20 JSONFormat 21 ) 22 23 // Stringer implementation 24 func (l LogFormat) String() string { 25 switch l { 26 case UnspecifiedFormat: 27 return "unspecified" 28 case StandardFormat: 29 return "standard" 30 case JSONFormat: 31 return "json" 32 } 33 34 // unreachable 35 return "unknown" 36 } 37 38 // NewVaultLogger creates a new logger with the specified level and a Vault 39 // formatter 40 func NewVaultLogger(level log.Level) log.Logger { 41 return NewVaultLoggerWithWriter(log.DefaultOutput, level) 42 } 43 44 // NewVaultLoggerWithWriter creates a new logger with the specified level and 45 // writer and a Vault formatter 46 func NewVaultLoggerWithWriter(w io.Writer, level log.Level) log.Logger { 47 opts := &log.LoggerOptions{ 48 Level: level, 49 IndependentLevels: true, 50 Output: w, 51 JSONFormat: ParseEnvLogFormat() == JSONFormat, 52 } 53 return log.New(opts) 54 } 55 56 // ParseLogFormat parses the log format from the provided string. 57 func ParseLogFormat(format string) (LogFormat, error) { 58 switch strings.ToLower(strings.TrimSpace(format)) { 59 case "": 60 return UnspecifiedFormat, nil 61 case "standard": 62 return StandardFormat, nil 63 case "json": 64 return JSONFormat, nil 65 default: 66 return UnspecifiedFormat, fmt.Errorf("unknown log format: %s", format) 67 } 68 } 69 70 // ParseEnvLogFormat parses the log format from an environment variable. 71 func ParseEnvLogFormat() LogFormat { 72 logFormat := os.Getenv("VAULT_LOG_FORMAT") 73 switch strings.ToLower(logFormat) { 74 case "json", "vault_json", "vault-json", "vaultjson": 75 return JSONFormat 76 case "standard": 77 return StandardFormat 78 default: 79 return UnspecifiedFormat 80 } 81 }