mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-11-03 20:17:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			82 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright (c) HashiCorp, Inc.
 | 
						|
// SPDX-License-Identifier: MPL-2.0
 | 
						|
 | 
						|
package logging
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"io"
 | 
						|
	"os"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	log "github.com/hashicorp/go-hclog"
 | 
						|
)
 | 
						|
 | 
						|
type LogFormat int
 | 
						|
 | 
						|
const (
 | 
						|
	UnspecifiedFormat LogFormat = iota
 | 
						|
	StandardFormat
 | 
						|
	JSONFormat
 | 
						|
)
 | 
						|
 | 
						|
// Stringer implementation
 | 
						|
func (l LogFormat) String() string {
 | 
						|
	switch l {
 | 
						|
	case UnspecifiedFormat:
 | 
						|
		return "unspecified"
 | 
						|
	case StandardFormat:
 | 
						|
		return "standard"
 | 
						|
	case JSONFormat:
 | 
						|
		return "json"
 | 
						|
	}
 | 
						|
 | 
						|
	// unreachable
 | 
						|
	return "unknown"
 | 
						|
}
 | 
						|
 | 
						|
// NewVaultLogger creates a new logger with the specified level and a Vault
 | 
						|
// formatter
 | 
						|
func NewVaultLogger(level log.Level) log.Logger {
 | 
						|
	return NewVaultLoggerWithWriter(log.DefaultOutput, level)
 | 
						|
}
 | 
						|
 | 
						|
// NewVaultLoggerWithWriter creates a new logger with the specified level and
 | 
						|
// writer and a Vault formatter
 | 
						|
func NewVaultLoggerWithWriter(w io.Writer, level log.Level) log.Logger {
 | 
						|
	opts := &log.LoggerOptions{
 | 
						|
		Level:             level,
 | 
						|
		IndependentLevels: true,
 | 
						|
		Output:            w,
 | 
						|
		JSONFormat:        ParseEnvLogFormat() == JSONFormat,
 | 
						|
	}
 | 
						|
	return log.New(opts)
 | 
						|
}
 | 
						|
 | 
						|
// ParseLogFormat parses the log format from the provided string.
 | 
						|
func ParseLogFormat(format string) (LogFormat, error) {
 | 
						|
	switch strings.ToLower(strings.TrimSpace(format)) {
 | 
						|
	case "":
 | 
						|
		return UnspecifiedFormat, nil
 | 
						|
	case "standard":
 | 
						|
		return StandardFormat, nil
 | 
						|
	case "json":
 | 
						|
		return JSONFormat, nil
 | 
						|
	default:
 | 
						|
		return UnspecifiedFormat, fmt.Errorf("unknown log format: %s", format)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// ParseEnvLogFormat parses the log format from an environment variable.
 | 
						|
func ParseEnvLogFormat() LogFormat {
 | 
						|
	logFormat := os.Getenv("VAULT_LOG_FORMAT")
 | 
						|
	switch strings.ToLower(logFormat) {
 | 
						|
	case "json", "vault_json", "vault-json", "vaultjson":
 | 
						|
		return JSONFormat
 | 
						|
	case "standard":
 | 
						|
		return StandardFormat
 | 
						|
	default:
 | 
						|
		return UnspecifiedFormat
 | 
						|
	}
 | 
						|
}
 |