forked from goffee/core
initial commits 2
This commit is contained in:
parent
5475b7dd26
commit
7f38826b9c
39 changed files with 4525 additions and 0 deletions
94
logger/logger.go
Normal file
94
logger/logger.go
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
// Copyright 2021 Harran Ali <harran.m@gmail.com>. All rights reserved.
|
||||
// Use of this source code is governed by MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package logger
|
||||
|
||||
import (
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
)
|
||||
|
||||
// logs file
|
||||
var logsFile *os.File
|
||||
|
||||
type Logger struct {
|
||||
infoLogger *log.Logger
|
||||
warningLogger *log.Logger
|
||||
errorLogger *log.Logger
|
||||
debugLogger *log.Logger
|
||||
}
|
||||
|
||||
var l *Logger
|
||||
|
||||
type LogsDriver interface {
|
||||
GetTarget() interface{}
|
||||
}
|
||||
|
||||
type LogFileDriver struct {
|
||||
FilePath string
|
||||
}
|
||||
|
||||
type LogNullDriver struct{}
|
||||
|
||||
func (n LogNullDriver) GetTarget() interface{} {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (f LogFileDriver) GetTarget() interface{} {
|
||||
return f.FilePath
|
||||
}
|
||||
|
||||
func NewLogger(driver LogsDriver) *Logger {
|
||||
if driver.GetTarget() == nil {
|
||||
l = &Logger{
|
||||
infoLogger: log.New(io.Discard, "info: ", log.LstdFlags),
|
||||
warningLogger: log.New(io.Discard, "warning: ", log.LstdFlags),
|
||||
errorLogger: log.New(io.Discard, "error: ", log.LstdFlags),
|
||||
debugLogger: log.New(io.Discard, "debug: ", log.LstdFlags),
|
||||
}
|
||||
return l
|
||||
}
|
||||
path, ok := driver.GetTarget().(string)
|
||||
if !ok {
|
||||
panic("something wrong with the file path")
|
||||
}
|
||||
logsFile, err := os.OpenFile(path, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0644)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
l = &Logger{
|
||||
infoLogger: log.New(logsFile, "info: ", log.LstdFlags),
|
||||
warningLogger: log.New(logsFile, "warning: ", log.LstdFlags),
|
||||
errorLogger: log.New(logsFile, "error: ", log.LstdFlags),
|
||||
debugLogger: log.New(logsFile, "debug: ", log.LstdFlags),
|
||||
}
|
||||
return l
|
||||
}
|
||||
|
||||
func ResolveLogger() *Logger {
|
||||
return l
|
||||
}
|
||||
|
||||
func (l *Logger) Info(msg interface{}) {
|
||||
l.infoLogger.Println(msg)
|
||||
}
|
||||
|
||||
func (l *Logger) Debug(msg interface{}) {
|
||||
l.debugLogger.Println(msg)
|
||||
}
|
||||
|
||||
func (l *Logger) Warning(msg interface{}) {
|
||||
l.warningLogger.Println(msg)
|
||||
}
|
||||
|
||||
func (l *Logger) Error(msg interface{}) {
|
||||
l.errorLogger.Println(msg)
|
||||
}
|
||||
|
||||
func CloseLogsFile() {
|
||||
if logsFile != nil {
|
||||
defer logsFile.Close()
|
||||
}
|
||||
}
|
||||
133
logger/logger_test.go
Normal file
133
logger/logger_test.go
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
package logger
|
||||
|
||||
import (
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
func TestNewLogger(t *testing.T) {
|
||||
fp := filepath.Join(t.TempDir(), uuid.NewString())
|
||||
f, err := os.Create(fp)
|
||||
if err != nil {
|
||||
t.Errorf("failed test new logger")
|
||||
}
|
||||
f.Close()
|
||||
l := NewLogger(&LogNullDriver{})
|
||||
l.Info("testing")
|
||||
fdrv := &LogFileDriver{
|
||||
fp,
|
||||
}
|
||||
trgt := fdrv.GetTarget()
|
||||
ts, ok := trgt.(string)
|
||||
if !ok {
|
||||
t.Errorf("failed test new logger")
|
||||
}
|
||||
if ts != fp {
|
||||
t.Errorf("failed test new logger")
|
||||
}
|
||||
l = NewLogger(fdrv)
|
||||
l.Error("test-err")
|
||||
f, err = os.Open(fp)
|
||||
if err != nil {
|
||||
t.Errorf("failed test new logger")
|
||||
}
|
||||
defer f.Close()
|
||||
b, err := io.ReadAll(f)
|
||||
if !strings.Contains(string(b), "test-err") {
|
||||
t.Errorf("failed test new logger")
|
||||
}
|
||||
}
|
||||
|
||||
func TestInfo(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), uuid.NewString())
|
||||
l := NewLogger(&LogFileDriver{
|
||||
FilePath: path,
|
||||
})
|
||||
l.Info("DFT2V56H")
|
||||
lf, err := os.Open(path)
|
||||
if err != nil {
|
||||
t.Error("failed testing info")
|
||||
}
|
||||
d, err := io.ReadAll(lf)
|
||||
if err != nil {
|
||||
t.Error("error testing info")
|
||||
}
|
||||
if !strings.Contains(string(d), "DFT2V56H") {
|
||||
t.Error("error testing info")
|
||||
}
|
||||
t.Cleanup(func() {
|
||||
CloseLogsFile()
|
||||
})
|
||||
}
|
||||
|
||||
func TestWarning(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), uuid.NewString())
|
||||
l := NewLogger(&LogFileDriver{
|
||||
FilePath: path,
|
||||
})
|
||||
|
||||
l.Warning("DFT2V56H")
|
||||
lf, err := os.Open(path)
|
||||
if err != nil {
|
||||
t.Error("failed testing warning")
|
||||
}
|
||||
d, err := io.ReadAll(lf)
|
||||
if err != nil {
|
||||
t.Error("failed testing warning")
|
||||
}
|
||||
if !strings.Contains(string(d), "DFT2V56H") {
|
||||
t.Error("failed testing warning")
|
||||
}
|
||||
t.Cleanup(func() {
|
||||
CloseLogsFile()
|
||||
})
|
||||
}
|
||||
|
||||
func TestDebug(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), uuid.NewString())
|
||||
l := NewLogger(&LogFileDriver{
|
||||
FilePath: path,
|
||||
})
|
||||
l.Debug("DFT2V56H")
|
||||
lf, err := os.Open(path)
|
||||
if err != nil {
|
||||
t.Error("failed testing debug")
|
||||
}
|
||||
d, err := io.ReadAll(lf)
|
||||
if err != nil {
|
||||
t.Error("error testing debug")
|
||||
}
|
||||
if !strings.Contains(string(d), "DFT2V56H") {
|
||||
t.Error("error testing debug")
|
||||
}
|
||||
t.Cleanup(func() {
|
||||
CloseLogsFile()
|
||||
})
|
||||
}
|
||||
|
||||
func TestError(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), uuid.NewString())
|
||||
l := NewLogger(&LogFileDriver{
|
||||
FilePath: path,
|
||||
})
|
||||
l.Error("DFT2V56H")
|
||||
lf, err := os.Open(path)
|
||||
if err != nil {
|
||||
t.Error("failed testing error")
|
||||
}
|
||||
d, err := io.ReadAll(lf)
|
||||
if err != nil {
|
||||
t.Error("failed testing error")
|
||||
}
|
||||
if !strings.Contains(string(d), "DFT2V56H") {
|
||||
t.Error("failed testing error")
|
||||
}
|
||||
t.Cleanup(func() {
|
||||
CloseLogsFile()
|
||||
})
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue