Skip to content

Commit

Permalink
Merge pull request #108 from hashicorp/f-header-color
Browse files Browse the repository at this point in the history
Add ability to only colorize the header, not the whole log message
  • Loading branch information
evanphx committed Mar 3, 2022
2 parents 8103345 + fc772a8 commit b6b5567
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 3 deletions.
2 changes: 2 additions & 0 deletions colorize_unix.go
@@ -1,3 +1,4 @@
//go:build !windows
// +build !windows

package hclog
Expand All @@ -21,6 +22,7 @@ func (l *intLogger) setColorization(opts *LoggerOptions) {
isCygwinTerm := isatty.IsCygwinTerminal(fi.Fd())
isTerm := isUnixTerm || isCygwinTerm
if !isTerm {
l.headerColor = ColorOff
l.writer.color = ColorOff
}
}
Expand Down
7 changes: 6 additions & 1 deletion colorize_windows.go
@@ -1,3 +1,4 @@
//go:build windows
// +build windows

package hclog
Expand Down Expand Up @@ -26,8 +27,12 @@ func (l *intLogger) setColorization(opts *LoggerOptions) {
isTerm := isUnixTerm || isCygwinTerm
if !isTerm {
l.writer.color = ColorOff
l.headerColor = ColorOff
return
}
l.writer.w = colorable.NewColorable(fi)

if l.headerColor == ColorOff {
l.writer.w = colorable.NewColorable(fi)
}
}
}
22 changes: 20 additions & 2 deletions intlogger.go
Expand Up @@ -69,6 +69,8 @@ type intLogger struct {
writer *writer
level *int32

headerColor ColorOption

implied []interface{}

exclude func(level Level, msg string, args ...interface{}) bool
Expand Down Expand Up @@ -113,17 +115,28 @@ func newLogger(opts *LoggerOptions) *intLogger {
mutex = new(sync.Mutex)
}

var primaryColor, headerColor ColorOption

if opts.ColorHeaderOnly {
primaryColor = ColorOff
headerColor = opts.Color
} else {
primaryColor = opts.Color
headerColor = ColorOff
}

l := &intLogger{
json: opts.JSONFormat,
name: opts.Name,
timeFormat: TimeFormat,
timeFn: time.Now,
disableTime: opts.DisableTime,
mutex: mutex,
writer: newWriter(output, opts.Color),
writer: newWriter(output, primaryColor),
level: new(int32),
exclude: opts.Exclude,
independentLevels: opts.IndependentLevels,
headerColor: headerColor,
}
if opts.IncludeLocation {
l.callerOffset = offsetIntLogger + opts.AdditionalLocationOffset
Expand Down Expand Up @@ -232,7 +245,12 @@ func (l *intLogger) logPlain(t time.Time, name string, level Level, msg string,

s, ok := _levelToBracket[level]
if ok {
l.writer.WriteString(s)
if l.headerColor != ColorOff {
color := _levelToColor[level]
color.Fprint(l.writer, s)
} else {
l.writer.WriteString(s)
}
} else {
l.writer.WriteString("[?????]")
}
Expand Down
3 changes: 3 additions & 0 deletions logger.go
Expand Up @@ -271,6 +271,9 @@ type LoggerOptions struct {
// are concretely instances of *os.File.
Color ColorOption

// Only color the header, not the body. This can help with readability of long messages.
ColorHeaderOnly bool

// A function which is called with the log information and if it returns true the value
// should not be logged.
// This is useful when interacting with a system that you wish to suppress the log
Expand Down

0 comments on commit b6b5567

Please sign in to comment.