/* * ECAL * * Copyright 2020 Matthias Ladkau. All rights reserved. * * This Source Code Form is subject to the terms of the MIT * License, If a copy of the MIT License was not distributed with this * file, You can obtain one at https://opensource.org/licenses/MIT. */ package util import ( "fmt" "log" "devt.de/krotik/common/datautil" ) // Logging implementations // ======================= /* MemoryLogger collects log messages in a RingBuffer in memory. */ type MemoryLogger struct { *datautil.RingBuffer } /* NewMemoryLogger returns a new memory logger instance. */ func NewMemoryLogger(size int) *MemoryLogger { return &MemoryLogger{datautil.NewRingBuffer(size)} } /* LogError adds a new error log message. */ func (ml *MemoryLogger) LogError(p *Processor, m ...interface{}) { ml.RingBuffer.Add(fmt.Sprintf("error: %v", fmt.Sprint(m...))) } /* LogInfo adds a new info log message. */ func (ml *MemoryLogger) LogInfo(p *Processor, m ...interface{}) { ml.RingBuffer.Add(fmt.Sprintf("info: %v", fmt.Sprint(m...))) } /* LogDebug adds a new debug log message. */ func (ml *MemoryLogger) LogDebug(p *Processor, m ...interface{}) { ml.RingBuffer.Add(fmt.Sprintf("debug: %v", fmt.Sprint(m...))) } /* Slice returns the contents of the current log as a slice. */ func (ml *MemoryLogger) Slice() []string { sl := ml.RingBuffer.Slice() ret := make([]string, len(sl)) for i, lm := range sl { ret[i] = lm.(string) } return ret } /* Reset resets the current log. */ func (ml *MemoryLogger) Reset() { ml.RingBuffer.Reset() } /* Size returns the current log size. */ func (ml *MemoryLogger) Size() int { return ml.RingBuffer.Size() } /* String returns the current log as a string. */ func (ml *MemoryLogger) String() string { return ml.RingBuffer.String() } /* StdOutLogger writes log messages to stdout. */ type StdOutLogger struct { stdlog func(v ...interface{}) } /* NewStdOutLogger returns a stdout logger instance. */ func NewStdOutLogger() *StdOutLogger { return &StdOutLogger{log.Print} } /* LogError adds a new error log message. */ func (sl *StdOutLogger) LogError(p *Processor, m ...interface{}) { sl.stdlog(fmt.Sprintf("error: %v", fmt.Sprint(m...))) } /* LogInfo adds a new info log message. */ func (sl *StdOutLogger) LogInfo(p *Processor, m ...interface{}) { sl.stdlog(fmt.Sprintf("error: %v", fmt.Sprint(m...))) } /* LogDebug adds a new debug log message. */ func (sl *StdOutLogger) LogDebug(p *Processor, m ...interface{}) { sl.stdlog(fmt.Sprintf("error: %v", fmt.Sprint(m...))) } /* NullLogger discards log messages. */ type NullLogger struct { } /* NewNullLogger returns a null logger instance. */ func NewNullLogger() *NullLogger { return &NullLogger{} } /* LogError adds a new error log message. */ func (nl *NullLogger) LogError(p *Processor, m ...interface{}) { } /* LogInfo adds a new info log message. */ func (nl *NullLogger) LogInfo(p *Processor, m ...interface{}) { } /* LogDebug adds a new debug log message. */ func (nl *NullLogger) LogDebug(p *Processor, m ...interface{}) { }