Skip to content

Commit

Permalink
Helper method to simplify passing Logger as io.Writer (#25)
Browse files Browse the repository at this point in the history
* Make Logger comply with io.Writer

Alternative to #24

* Fixed SimpleRenderer

* Format message upon log entry creation

* Reorder fields

* Introduce AsWriter method
  • Loading branch information
fkorotkov authored Oct 6, 2022
1 parent 3724ece commit 7da1e00
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 22 deletions.
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ go 1.14

require (
github.com/stretchr/testify v1.6.1
golang.org/x/sys v0.0.0-20200817155316-9781c653f443
golang.org/x/text v0.3.3
golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec
golang.org/x/text v0.3.7
)
4 changes: 4 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,12 @@ github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
golang.org/x/sys v0.0.0-20200817155316-9781c653f443 h1:X18bCaipMcoJGm27Nv7zr4XYPKGUy92GtqboKC2Hxaw=
golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec h1:BkDtF2Ih9xZ7le9ndzTA7KJow28VbQW3odyk/8drmuI=
golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
Expand Down
22 changes: 12 additions & 10 deletions log_entry.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,23 +52,25 @@ func (entry *LogScopeFinished) GetScopes() []string {
}

type LogEntryMessage struct {
Level LogLevel
format string
arguments []interface{}
scopes []string
Level LogLevel
scopes []string
message string
raw bool
}

func NewLogEntryMessage(scopes []string, level LogLevel, format string, a ...interface{}) *LogEntryMessage {
func NewLogEntryMessage(scopes []string, level LogLevel, format string, arguments ...interface{}) *LogEntryMessage {
return &LogEntryMessage{
Level: level,
format: format,
arguments: a,
scopes: scopes,
Level: level,
scopes: scopes,
message: fmt.Sprintf(format, arguments...),
}
}

func (entry *LogEntryMessage) GetMessage() string {
return fmt.Sprintf(entry.format, entry.arguments...)
if entry.raw {
return entry.message
}
return entry.message + "\n"
}

func (entry *LogEntryMessage) GetScopes() []string {
Expand Down
28 changes: 24 additions & 4 deletions logger.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package echelon

import "io"

type genericLogEntry struct {
LogStarted *LogScopeStarted
LogFinished *LogScopeFinished
Expand All @@ -13,12 +15,26 @@ type LogRendered interface {
}

type Logger struct {
level LogLevel
maxLogLevel LogLevel
scopes []string
entriesChannel chan *genericLogEntry
renderer LogRendered
}

type loggerAsWriter struct {
logger *Logger
level LogLevel
}

func (w *loggerAsWriter) Write(p []byte) (n int, err error) {
if w.logger.IsLogLevelEnabled(w.level) {
logEntryMessage := NewLogEntryMessage(w.logger.scopes, w.level, string(p))
logEntryMessage.raw = true
w.logger.entriesChannel <- &genericLogEntry{LogEntry: logEntryMessage}
}
return len(p), err
}

type FinishType int

const (
Expand All @@ -29,7 +45,7 @@ const (

func NewLogger(level LogLevel, renderer LogRendered) *Logger {
logger := &Logger{
level: level,
maxLogLevel: level,
entriesChannel: make(chan *genericLogEntry),
renderer: renderer,
}
Expand All @@ -43,7 +59,7 @@ func (logger *Logger) Renderer() LogRendered {

func (logger *Logger) Scoped(scope string) *Logger {
result := &Logger{
level: logger.level,
maxLogLevel: logger.maxLogLevel,
scopes: append(logger.scopes, scope),
entriesChannel: logger.entriesChannel,
}
Expand Down Expand Up @@ -96,6 +112,10 @@ func (logger *Logger) Logf(level LogLevel, format string, args ...interface{}) {
}
}

func (logger *Logger) AsWriter(level LogLevel) io.Writer {
return &loggerAsWriter{logger: logger, level: level}
}

func (logger *Logger) Finish(success bool) {
var finishType FinishType

Expand All @@ -115,5 +135,5 @@ func (logger *Logger) FinishWithType(finishType FinishType) {
}

func (logger *Logger) IsLogLevelEnabled(level LogLevel) bool {
return level <= logger.level
return level <= logger.maxLogLevel
}
2 changes: 1 addition & 1 deletion renderers/interactive.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ func (r *InteractiveRenderer) RenderScopeFinished(entry *echelon.LogScopeFinishe
}

func (r *InteractiveRenderer) RenderMessage(entry *echelon.LogEntryMessage) {
findScopedNode(entry.GetScopes(), r).AppendDescription(entry.GetMessage() + "\n")
findScopedNode(entry.GetScopes(), r).AppendDescription(entry.GetMessage())
}

func (r *InteractiveRenderer) StartDrawing() {
Expand Down
10 changes: 5 additions & 5 deletions renderers/simple.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ func (r SimpleRenderer) RenderScopeStarted(entry *echelon.LogScopeStarted) {
r.startTimes[timeKey] = time.Now()
lastScope := scopes[level-1]
message := terminal.GetColoredText(r.colors.NeutralColor, fmt.Sprintf("Started %s", quotedIfNeeded(lastScope)))
r.RenderRawMessage(message)
r.RenderRawMessage(message + "\n")
}

func (r SimpleRenderer) RenderScopeFinished(entry *echelon.LogScopeFinished) {
Expand All @@ -68,15 +68,15 @@ func (r SimpleRenderer) RenderScopeFinished(entry *echelon.LogScopeFinished) {
case echelon.FinishTypeSucceeded:
message := fmt.Sprintf("%s succeeded in %s!", quotedIfNeeded(lastScope), formatedDuration)
coloredMessage := terminal.GetColoredText(r.colors.SuccessColor, message)
r.RenderRawMessage(coloredMessage)
r.RenderRawMessage(coloredMessage + "\n")
case echelon.FinishTypeFailed:
message := fmt.Sprintf("%s failed in %s!", quotedIfNeeded(lastScope), formatedDuration)
coloredMessage := terminal.GetColoredText(r.colors.FailureColor, message)
r.RenderRawMessage(coloredMessage)
r.RenderRawMessage(coloredMessage + "\n")
case echelon.FinishTypeSkipped:
message := fmt.Sprintf("%s skipped in %s!", quotedIfNeeded(lastScope), formatedDuration)
coloredMessage := terminal.GetColoredText(r.colors.NeutralColor, message)
r.RenderRawMessage(coloredMessage)
r.RenderRawMessage(coloredMessage + "\n")
}
}

Expand All @@ -85,7 +85,7 @@ func (r SimpleRenderer) RenderMessage(entry *echelon.LogEntryMessage) {
}

func (r SimpleRenderer) RenderRawMessage(message string) {
_, _ = r.out.Write([]byte(message + "\n"))
_, _ = r.out.Write([]byte(message))
}

func (r SimpleRenderer) ScopeHasStarted(scopes []string) bool {
Expand Down

0 comments on commit 7da1e00

Please sign in to comment.