81 lines
1.7 KiB
Go
81 lines
1.7 KiB
Go
package logger
|
|
|
|
import (
|
|
"fmt"
|
|
pterror "git.markbailey.dev/cerbervs/ptpp/lib/error"
|
|
"git.markbailey.dev/cerbervs/ptpp/util/shared"
|
|
"log"
|
|
"os"
|
|
"sync"
|
|
)
|
|
|
|
var (
|
|
concreteCompositeLog *Log
|
|
compositeLogFile *os.File
|
|
compositeLoggerLock = &sync.Mutex{}
|
|
compositeLogFileLock = &sync.Mutex{}
|
|
)
|
|
|
|
type CompositeLogger struct{}
|
|
|
|
func NewCompositeLogger() *CompositeLogger {
|
|
return &CompositeLogger{}
|
|
}
|
|
|
|
func (l CompositeLogger) GetLogger() *Log {
|
|
if concreteCompositeLog == nil {
|
|
compositeLoggerLock.Lock()
|
|
defer compositeLoggerLock.Unlock()
|
|
|
|
logFile := l.getLogFile()
|
|
|
|
concreteCompositeLog = &Log{
|
|
Error: log.New(logFile, "Error:\t", log.Ldate|log.Ltime),
|
|
Warn: log.New(logFile, "Warn:\t", log.Ldate|log.Ltime),
|
|
Info: log.New(logFile, "Info:\t", log.Ldate|log.Ltime),
|
|
}
|
|
}
|
|
|
|
return concreteCompositeLog
|
|
}
|
|
|
|
func (l CompositeLogger) getLogFile() *os.File {
|
|
if compositeLogFile == nil {
|
|
compositeLogFileLock.Lock()
|
|
defer compositeLogFileLock.Unlock()
|
|
|
|
absPath := shared.GetFullyQualifiedPath("/log")
|
|
|
|
err := os.MkdirAll(absPath, os.ModePerm)
|
|
if err != nil {
|
|
fmt.Println("Error creating directory:", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
generalLog, err := os.OpenFile(absPath+"/general-log.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
|
|
if err != nil {
|
|
fmt.Println("Error opening file:", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
compositeLogFile = generalLog
|
|
}
|
|
|
|
return compositeLogFile
|
|
}
|
|
func (l CompositeLogger) Error(e error) {
|
|
l.GetLogger().Error.Println(e)
|
|
}
|
|
|
|
func (l CompositeLogger) Warn(w string) {
|
|
l.GetLogger().Warn.Println(w)
|
|
}
|
|
|
|
func (l CompositeLogger) Info(i string) {
|
|
l.GetLogger().Info.Println(i)
|
|
}
|
|
|
|
func (l CompositeLogger) Wrap(e error, context string) error {
|
|
return pterror.Wrap(e, context)
|
|
}
|