78 lines
2 KiB
Go
78 lines
2 KiB
Go
|
package logging
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"log"
|
||
|
"os"
|
||
|
)
|
||
|
|
||
|
// Logging platform
|
||
|
type loggerObserver interface {
|
||
|
Log(message string)
|
||
|
setLogFile()
|
||
|
setLogFilePrefix(prefix string)
|
||
|
setLogDirectory(dirName string)
|
||
|
init(opts ...loggerOption)
|
||
|
}
|
||
|
|
||
|
type specifics struct {
|
||
|
logFilePrefix string
|
||
|
logFile *log.Logger
|
||
|
}
|
||
|
|
||
|
type loggerObserverImpl struct {
|
||
|
logFile *log.Logger
|
||
|
logObserverSpecifics map[string]*specifics
|
||
|
logDirectory string
|
||
|
}
|
||
|
|
||
|
func (loi *loggerObserverImpl) init(opts ...loggerOption) {
|
||
|
for _, opt := range opts {
|
||
|
// applying logger options
|
||
|
if err := opt(loi); err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (loi loggerObserverImpl) Log(message string) {}
|
||
|
|
||
|
// Requires logFilePrefix to have already been set
|
||
|
func (loi *loggerObserverImpl) setLogFile() {
|
||
|
for prefix, ls := range loi.logObserverSpecifics {
|
||
|
if logFile, err := os.Create(ls.logFilePrefix); err != nil {
|
||
|
log.Fatal("Unable to create logFile: ", err)
|
||
|
} else {
|
||
|
fmt.Printf("Creating logFile with pathname: %s, and prefix: %s\n", ls.logFilePrefix, prefix)
|
||
|
ls.logFile = log.New(logFile, "", log.LstdFlags)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (loi *loggerObserverImpl) setLogFilePrefix(prefix string) {
|
||
|
// Setting logFilePrefix for pcp logger
|
||
|
pcpLogFilePrefix := prefix + ".pcplog"
|
||
|
if loi.logDirectory != "" {
|
||
|
pcpLogFilePrefix = loi.logDirectory + "/" + pcpLogFilePrefix
|
||
|
}
|
||
|
loi.logObserverSpecifics[pcpLogger].logFilePrefix = pcpLogFilePrefix
|
||
|
|
||
|
// Setting logFilePrefix for console logger
|
||
|
consoleLogFilePrefix := prefix + "_console.log"
|
||
|
if loi.logDirectory != "" {
|
||
|
consoleLogFilePrefix = loi.logDirectory + "/" + consoleLogFilePrefix
|
||
|
}
|
||
|
loi.logObserverSpecifics[conLogger].logFilePrefix = consoleLogFilePrefix
|
||
|
|
||
|
// Setting logFilePrefix for schedTrace logger
|
||
|
schedTraceLogFilePrefix := prefix + "_schedTrace.log"
|
||
|
if loi.logDirectory != "" {
|
||
|
schedTraceLogFilePrefix = loi.logDirectory + "/" + schedTraceLogFilePrefix
|
||
|
}
|
||
|
loi.logObserverSpecifics[schedTraceLogger].logFilePrefix = schedTraceLogFilePrefix
|
||
|
}
|
||
|
|
||
|
func (loi *loggerObserverImpl) setLogDirectory(dirName string) {
|
||
|
loi.logDirectory = dirName
|
||
|
}
|