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  }