mirror of
https://github.com/DominicBreuker/pspy.git
synced 2025-12-21 11:44:51 +00:00
start big refactoring
This commit is contained in:
37
internal/logger/logger.go
Normal file
37
internal/logger/logger.go
Normal file
@@ -0,0 +1,37 @@
|
||||
package logger
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
)
|
||||
|
||||
// Logger is the logger used to print to the command line
|
||||
type Logger struct {
|
||||
infoLogger *log.Logger
|
||||
errorLogger *log.Logger
|
||||
eventLogger *log.Logger
|
||||
}
|
||||
|
||||
// NewLogger creates a new logger instance
|
||||
func NewLogger() *Logger {
|
||||
return &Logger{
|
||||
infoLogger: log.New(os.Stdout, "", 0),
|
||||
errorLogger: log.New(os.Stderr, "", 0),
|
||||
eventLogger: log.New(os.Stdout, "", log.Ldate|log.Ltime),
|
||||
}
|
||||
}
|
||||
|
||||
// Infof writes an info message to stdout
|
||||
func (l *Logger) Infof(format string, v ...interface{}) {
|
||||
l.infoLogger.Printf(format, v...)
|
||||
}
|
||||
|
||||
// Errorf writes an error message to stderr
|
||||
func (l *Logger) Errorf(format string, v ...interface{}) {
|
||||
l.errorLogger.Printf(format, v...)
|
||||
}
|
||||
|
||||
// Eventf writes an event with timestamp to stdout
|
||||
func (l *Logger) Eventf(format string, v ...interface{}) {
|
||||
l.eventLogger.Printf(format, v...)
|
||||
}
|
||||
41
internal/logger/logger_test.go
Normal file
41
internal/logger/logger_test.go
Normal file
@@ -0,0 +1,41 @@
|
||||
package logger
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"log"
|
||||
"regexp"
|
||||
"testing"
|
||||
)
|
||||
|
||||
const dateFormatPattern = `[\d]{4}/[\d]{2}/[\d]{2} [\d]{2}:[\d]{2}:[\d]{2}`
|
||||
|
||||
var l = NewLogger()
|
||||
|
||||
var logTests = []struct {
|
||||
logger *log.Logger
|
||||
test func()
|
||||
expectation string
|
||||
}{
|
||||
{l.infoLogger, func() { l.Infof("Info message no. %d", 1) }, "Info message no. 1\n"},
|
||||
{l.infoLogger, func() { l.Infof("Info message no. %d with a string %s\n", 2, "appended to it") }, "Info message no. 2 with a string appended to it\n"},
|
||||
{l.errorLogger, func() { l.Errorf("Error message") }, "Error message\n"},
|
||||
{l.errorLogger, func() { l.Errorf("Error message\n") }, "Error message\n"},
|
||||
{l.eventLogger, func() { l.Eventf("Event message") }, dateFormatPattern + " Event message\n"},
|
||||
}
|
||||
|
||||
func TestLogging(t *testing.T) {
|
||||
for i, tt := range logTests {
|
||||
actual := captureOutput(tt.logger, tt.test)
|
||||
matcher := regexp.MustCompile(tt.expectation)
|
||||
if !matcher.Match([]byte(actual)) {
|
||||
t.Fatalf("[%d] Wrong message logged!: %s", i, actual)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func captureOutput(logger *log.Logger, f func()) string {
|
||||
var buf bytes.Buffer
|
||||
logger.SetOutput(&buf)
|
||||
f()
|
||||
return buf.String()
|
||||
}
|
||||
Reference in New Issue
Block a user