2019-10-31 14:32:46 -04:00
// Copyright (C) 2018 spdfg
2018-10-06 20:03:14 -07:00
//
// This file is part of Elektron.
//
// Elektron is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Elektron is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Elektron. If not, see <http://www.gnu.org/licenses/>.
//
2018-01-19 21:20:43 +00:00
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
2018-02-02 19:15:48 -05:00
2018-02-11 13:11:42 +00:00
// Setting logFilePrefix for schedulingPolicySwitch logger
schedPolicySwitchLogFilePrefix := prefix + "_schedPolicySwitch.log"
if loi . logDirectory != "" {
schedPolicySwitchLogFilePrefix = loi . logDirectory + "/" + schedPolicySwitchLogFilePrefix
}
loi . logObserverSpecifics [ spsLogger ] . logFilePrefix = schedPolicySwitchLogFilePrefix
2018-04-17 20:10:36 +00:00
// Setting logFilePrefix for clsfnTaskDist logger.
// Execution time of every call to def.GetTaskDistribution(...) would be recorded and logged in this file.
// The overhead would be logged in microseconds.
clsfnTaskDistOverheadLogFilePrefix := prefix + "_classificationOverhead.log"
if loi . logDirectory != "" {
clsfnTaskDistOverheadLogFilePrefix = loi . logDirectory + "/" + clsfnTaskDistOverheadLogFilePrefix
}
loi . logObserverSpecifics [ clsfnTaskDistOverheadLogger ] . logFilePrefix = clsfnTaskDistOverheadLogFilePrefix
2018-04-17 23:44:36 +00:00
// Setting logFilePrefix for schedWindow logger.
// Going to log the time stamp when the scheduling window was determined
// and the size of the scheduling window.
schedWindowLogFilePrefix := prefix + "_schedWindow.log"
if loi . logDirectory != "" {
schedWindowLogFilePrefix = loi . logDirectory + "/" + schedWindowLogFilePrefix
}
loi . logObserverSpecifics [ schedWindowLogger ] . logFilePrefix = schedWindowLogFilePrefix
2018-01-19 21:20:43 +00:00
}
func ( loi * loggerObserverImpl ) setLogDirectory ( dirName string ) {
loi . logDirectory = dirName
}