1
0
Fork 0
forked from goffee/core

initial commits 2

This commit is contained in:
Zeni Kim 2024-09-12 17:13:16 -05:00
parent 5475b7dd26
commit 7f38826b9c
39 changed files with 4525 additions and 0 deletions

94
logger/logger.go Normal file
View 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
View 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()
})
}