Skip to content

Commit

Permalink
Merge #3380: Filter logs by log level in TF_LOG
Browse files Browse the repository at this point in the history
  • Loading branch information
apparentlymart committed Oct 11, 2015
2 parents 8f237a7 + 8173cd2 commit 11aa0cd
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 18 deletions.
2 changes: 1 addition & 1 deletion config_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func configDir() (string, error) {
func homeDir() (string, error) {
// First prefer the HOME environmental variable
if home := os.Getenv("HOME"); home != "" {
log.Printf("Detected home directory from env var: %s", home)
log.Printf("[DEBUG] Detected home directory from env var: %s", home)
return home, nil
}

Expand Down
61 changes: 49 additions & 12 deletions log.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,65 @@ package main

import (
"io"
"log"
"os"
"strings"

"github.com/hashicorp/logutils"
)

// These are the environmental variables that determine if we log, and if
// we log whether or not the log should go to a file.
const EnvLog = "TF_LOG" //Set to True
const EnvLogFile = "TF_LOG_PATH" //Set to a file
const (
EnvLog = "TF_LOG" // Set to True
EnvLogFile = "TF_LOG_PATH" // Set to a file
)

// logOutput determines where we should send logs (if anywhere).
var validLevels = []logutils.LogLevel{"TRACE", "DEBUG", "INFO", "WARN", "ERROR"}

// logOutput determines where we should send logs (if anywhere) and the log level.
func logOutput() (logOutput io.Writer, err error) {
logOutput = nil
if os.Getenv(EnvLog) != "" {
logOutput = os.Stderr

if logPath := os.Getenv(EnvLogFile); logPath != "" {
var err error
logOutput, err = os.Create(logPath)
if err != nil {
return nil, err
}
envLevel := os.Getenv(EnvLog)
if envLevel == "" {
return
}

logOutput = os.Stderr
if logPath := os.Getenv(EnvLogFile); logPath != "" {
var err error
logOutput, err = os.Create(logPath)
if err != nil {
return nil, err
}
}

// This was the default since the beginning
logLevel := logutils.LogLevel("TRACE")

if isValidLogLevel(envLevel) {
// allow following for better ux: info, Info or INFO
logLevel = logutils.LogLevel(strings.ToUpper(envLevel))
} else {
log.Printf("[WARN] Invalid log level: %q. Defaulting to level: TRACE. Valid levels are: %+v",
envLevel, validLevels)
}

logOutput = &logutils.LevelFilter{
Levels: validLevels,
MinLevel: logLevel,
Writer: logOutput,
}

return
}

func isValidLogLevel(level string) bool {
for _, l := range validLevels {
if strings.ToUpper(level) == string(l) {
return true
}
}

return false
}
4 changes: 2 additions & 2 deletions plugin/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ func CleanupClients() {
}(client)
}

log.Println("waiting for all plugin processes to complete...")
log.Println("[DEBUG] waiting for all plugin processes to complete...")
wg.Wait()
}

Expand Down Expand Up @@ -326,7 +326,7 @@ func (c *Client) logStderr(r io.Reader) {
c.config.Stderr.Write([]byte(line))

line = strings.TrimRightFunc(line, unicode.IsSpace)
log.Printf("%s: %s", filepath.Base(c.config.Cmd.Path), line)
log.Printf("[DEBUG] %s: %s", filepath.Base(c.config.Cmd.Path), line)
}

if err == io.EOF {
Expand Down
2 changes: 1 addition & 1 deletion terraform/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -513,7 +513,7 @@ func (c *Context) releaseRun(ch chan<- struct{}) {
func (c *Context) walk(
graph *Graph, operation walkOperation) (*ContextGraphWalker, error) {
// Walk the graph
log.Printf("[INFO] Starting graph walk: %s", operation.String())
log.Printf("[DEBUG] Starting graph walk: %s", operation.String())
walker := &ContextGraphWalker{Context: c, Operation: operation}
return walker, graph.Walk(walker)
}
7 changes: 5 additions & 2 deletions terraform/eval_validate.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,12 @@ func (n *EvalValidateCount) Eval(ctx EvalContext) (interface{}, error) {
}

RETURN:
return nil, &EvalValidateError{
Errors: errs,
if len(errs) != 0 {
err = &EvalValidateError{
Errors: errs,
}
}
return nil, err
}

// EvalValidateProvider is an EvalNode implementation that validates
Expand Down

0 comments on commit 11aa0cd

Please sign in to comment.