text_formatter: fix race

This commit is contained in:
Simon Eskildsen 2017-02-05 19:10:19 -05:00
parent 1726e1744a
commit 11fbf0fa42
3 changed files with 12 additions and 6 deletions

View File

@ -2,6 +2,7 @@ package main
import ( import (
"github.com/Sirupsen/logrus" "github.com/Sirupsen/logrus"
"os"
) )
var log = logrus.New() var log = logrus.New()

View File

@ -80,11 +80,14 @@ func BenchmarkLargeJSONFormatter(b *testing.B) {
} }
func doBenchmark(b *testing.B, formatter Formatter, fields Fields) { func doBenchmark(b *testing.B, formatter Formatter, fields Fields) {
logger := New()
entry := &Entry{ entry := &Entry{
Time: time.Time{}, Time: time.Time{},
Level: InfoLevel, Level: InfoLevel,
Message: "message", Message: "message",
Data: fields, Data: fields,
Logger: logger,
} }
var d []byte var d []byte
var err error var err error

View File

@ -5,6 +5,7 @@ import (
"fmt" "fmt"
"sort" "sort"
"strings" "strings"
"sync"
"time" "time"
) )
@ -49,8 +50,8 @@ type TextFormatter struct {
DisableSorting bool DisableSorting bool
// Whether the logger's out is to a terminal // Whether the logger's out is to a terminal
isTerminal bool isTerminal bool
terminalDetermined bool terminalOnce sync.Once
} }
func (f *TextFormatter) Format(entry *Entry) ([]byte, error) { func (f *TextFormatter) Format(entry *Entry) ([]byte, error) {
@ -71,10 +72,11 @@ func (f *TextFormatter) Format(entry *Entry) ([]byte, error) {
prefixFieldClashes(entry.Data) prefixFieldClashes(entry.Data)
if !f.terminalDetermined { f.terminalOnce.Do(func() {
f.isTerminal = IsTerminal(entry.Logger.Out) if entry.Logger != nil {
f.terminalDetermined = true f.isTerminal = IsTerminal(entry.Logger.Out)
} }
})
isColored := (f.ForceColors || f.isTerminal) && !f.DisableColors isColored := (f.ForceColors || f.isTerminal) && !f.DisableColors