Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -96,5 +96,6 @@ require (
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 // indirect
golang.org/x/text v0.3.7 // indirect
gopkg.in/ini.v1 v1.66.3 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
)
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -848,6 +848,8 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.66.3 h1:jRskFVxYaMGAMUbN0UZ7niA9gzL9B49DOqE78vg0k3w=
gopkg.in/ini.v1 v1.66.3/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
Expand Down
91 changes: 91 additions & 0 deletions logging/file.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package logging

import (
"log"

"github.com/jmpsec/osctrl/settings"
"github.com/jmpsec/osctrl/types"
"github.com/rs/zerolog"
lumberjack "gopkg.in/natefinch/lumberjack.v2"
)

// LumberjackConfig to keep configuration for rotating logs
type LumberjackConfig struct {
// Maximum size in megabytes of the log file before it gets rotated
MaxSize int
// Maximum number of old log files to retain
MaxBackups int
// Maximum number of days to retain old log files based on the timestamp encoded in their filename
MaxAge int
// If the rotated log files should be compressed using gzip
Compress bool
}

// LoggerFile will be used to log data using external file
type LoggerFile struct {
Enabled bool
Filename string
Logger *zerolog.Logger
}

// CreateLoggerFile to initialize the logger
func CreateLoggerFile(filename string, cfg LumberjackConfig) (*LoggerFile, error) {
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
z := zerolog.New(&lumberjack.Logger{
Filename: filename,
MaxSize: cfg.MaxSize,
MaxBackups: cfg.MaxBackups,
MaxAge: cfg.MaxAge,
Compress: cfg.Compress,
})
logger := z.With().Caller().Timestamp().Logger()
return &LoggerFile{
Enabled: true,
Filename: filename,
Logger: &logger,
}, nil
}

// Settings - Function to prepare settings for the logger
func (logFile *LoggerFile) Settings(mgr *settings.Settings) {
log.Printf("No stdout logging settings\n")
}

// Log - Function that sends JSON result/status/query logs to stdout
func (logFile *LoggerFile) Log(logType string, data []byte, environment, uuid string, debug bool) {
if debug {
log.Printf("Sending %d bytes to stdout for %s - %s", len(data), environment, uuid)
}
switch logType {
case types.StatusLog:
logFile.Status(data, environment, uuid, debug)
case types.ResultLog:
logFile.Result(data, environment, uuid, debug)
}
}

// Status - Function that sends JSON status logs to stdout
func (logFile *LoggerFile) Status(data []byte, environment, uuid string, debug bool) {
logFile.Logger.Info().Str(
"type", types.StatusLog).Str(
"environment", environment).Str(
"uuid", uuid).RawJSON("data", data)
}

// Result - Function that sends JSON result logs to stdout
func (logFile *LoggerFile) Result(data []byte, environment, uuid string, debug bool) {
logFile.Logger.Info().Str(
"type", types.ResultLog).Str(
"environment", environment).Str(
"uuid", uuid).RawJSON("data", data)
}

// Query - Function that sends JSON query logs to stdout
func (logFile *LoggerFile) Query(data []byte, environment, uuid, name string, status int, debug bool) {
logFile.Logger.Info().Str(
"type", types.QueryLog).Str(
"environment", environment).Str(
"name", name).Int(
"status", status).Str(
"uuid", uuid).RawJSON("data", data)
}
30 changes: 30 additions & 0 deletions logging/logging.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,20 @@ func CreateLoggerTLS(logging, loggingFile string, mgr *settings.Settings, nodes
}
d.Settings(mgr)
l.Logger = d
case settings.LoggingFile:
// TODO: All this should be customizable
rotateCfg := LumberjackConfig{
MaxSize: 25,
MaxBackups: 5,
MaxAge: 10,
Compress: true,
}
d, err := CreateLoggerFile("osctrl.log", rotateCfg)
if err != nil {
return nil, err
}
d.Settings(mgr)
l.Logger = d
}
// Initialize the DB logger anyway
return l, nil
Expand Down Expand Up @@ -92,6 +106,14 @@ func (logTLS *LoggerTLS) Log(logType string, data []byte, environment, uuid stri
if l.Enabled {
l.Log(logType, data, environment, uuid, debug)
}
case settings.LoggingFile:
l, ok := logTLS.Logger.(LoggerFile)
if !ok {
log.Printf("error casting logger to %s", settings.LoggingFile)
}
if l.Enabled {
l.Log(logType, data, environment, uuid, debug)
}
}
}

Expand Down Expand Up @@ -130,5 +152,13 @@ func (logTLS *LoggerTLS) QueryLog(logType string, data []byte, environment, uuid
if l.Enabled {
l.Query(data, environment, uuid, name, status, debug)
}
case settings.LoggingFile:
l, ok := logTLS.Logger.(LoggerFile)
if !ok {
log.Printf("error casting logger to %s", settings.LoggingFile)
}
if l.Enabled {
l.Query(data, environment, uuid, name, status, debug)
}
}
}
16 changes: 8 additions & 8 deletions logging/stdout.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,24 +47,24 @@ func (logStdout *LoggerStdout) Log(logType string, data []byte, environment, uui
func (logStdout *LoggerStdout) Status(data []byte, environment, uuid string, debug bool) {
logStdout.Logger.Info().Str(
"type", types.StatusLog).Str(
"environment", environment).Str(
"uuid", uuid).RawJSON("data", data)
"environment", environment).Str(
"uuid", uuid).RawJSON("data", data)
}

// Result - Function that sends JSON result logs to stdout
func (logStdout *LoggerStdout) Result(data []byte, environment, uuid string, debug bool) {
logStdout.Logger.Info().Str(
"type", types.ResultLog).Str(
"environment", environment).Str(
"uuid", uuid).RawJSON("data", data)
"environment", environment).Str(
"uuid", uuid).RawJSON("data", data)
}

// Query - Function that sends JSON query logs to stdout
func (logStdout *LoggerStdout) Query(data []byte, environment, uuid, name string, status int, debug bool) {
logStdout.Logger.Info().Str(
"type", types.QueryLog).Str(
"environment", environment).Str(
"name", name).Int(
"status", status).Str(
"uuid", uuid).RawJSON("data", data)
"environment", environment).Str(
"name", name).Int(
"status", status).Str(
"uuid", uuid).RawJSON("data", data)
}
1 change: 1 addition & 0 deletions settings/settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ const (
const (
LoggingNone string = "none"
LoggingStdout string = "stdout"
LoggingFile string = "file"
LoggingDB string = "db"
LoggingGraylog string = "graylog"
LoggingSplunk string = "splunk"
Expand Down