Skip to content
Snippets Groups Projects
Commit 26d8512c authored by Jano Hendriks's avatar Jano Hendriks
Browse files

Fix log to buffer to log messages correctly

parent c949eefd
Branches
Tags v1.184.0
No related merge requests found
......@@ -4,6 +4,7 @@ import (
"bytes"
"encoding/json"
"fmt"
log "github.com/sirupsen/logrus"
"gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/errors"
"gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/string_utils"
"gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/utils"
......@@ -19,21 +20,22 @@ import (
"github.com/MindscapeHQ/raygun4go"
"github.com/aws/aws-lambda-go/events"
log "github.com/sirupsen/logrus"
)
type LogBufferWithLevel struct {
LogBuffer *bytes.Buffer
type LogEntryWithLevel struct {
//LogBuffer *bytes.Buffer
LogEntry *log.Entry
Message interface{}
LogLevel log.Level
}
var logger *log.Entry
var logBuffers []LogBufferWithLevel
var cachedLogEntries []LogEntryWithLevel
var apiRequest *events.APIGatewayProxyRequest
var currentRequestID *string
var isDebug = false
var logToBuffer = false
var storeLogsUntilTriggered = false
var disableLogging = false
var build string
var raygunClient *raygun4go.Client
......@@ -183,9 +185,12 @@ func InfoWithFields(fields map[string]interface{}, message interface{}) {
}
sanitisedFields := SanitiseFields(fields)
logBuffer := CheckToGetLogBuffer()
getLogger().WithFields(sanitisedFields).Info(message)
CheckToStoreLogBuffer(logBuffer, log.InfoLevel)
logEntry := getLogger().WithFields(sanitisedFields)
if storeLogsUntilTriggered {
storeLogEntry(logEntry, message, log.InfoLevel)
} else {
logEntry.Info(message)
}
}
func Info(format string, a ...interface{}) {
......@@ -195,9 +200,12 @@ func Info(format string, a ...interface{}) {
message := SanitiseLogs(fmt.Sprintf(format, a...))
logBuffer := CheckToGetLogBuffer()
getLogger().Info(message)
CheckToStoreLogBuffer(logBuffer, log.InfoLevel)
logEntry := getLogger()
if storeLogsUntilTriggered {
storeLogEntry(logEntry, message, log.InfoLevel)
} else {
logEntry.Info(message)
}
}
func ErrorWithFields(fields map[string]interface{}, err error) {
......@@ -208,9 +216,12 @@ func ErrorWithFields(fields map[string]interface{}, err error) {
sanitisedFields := SanitiseFields(fields)
sendRaygunError(sanitisedFields, err)
logBuffer := CheckToGetLogBuffer()
getLogger().WithFields(sanitisedFields).Error(err)
CheckToStoreLogBuffer(logBuffer, log.ErrorLevel)
logEntry := getLogger().WithFields(sanitisedFields)
if storeLogsUntilTriggered {
storeLogEntry(logEntry, err, log.ErrorLevel)
} else {
logEntry.Error(err)
}
}
func ErrorWithMsg(message string, err error) {
......@@ -241,9 +252,12 @@ func Warn(format string, a ...interface{}) {
message := SanitiseLogs(fmt.Sprintf(format, a...))
logBuffer := CheckToGetLogBuffer()
getLogger().Warn(message)
CheckToStoreLogBuffer(logBuffer, log.WarnLevel)
logEntry := getLogger()
if storeLogsUntilTriggered {
storeLogEntry(logEntry, message, log.WarnLevel)
} else {
logEntry.Warn(message)
}
}
func WarnWithFields(fields map[string]interface{}, err error) {
......@@ -252,9 +266,13 @@ func WarnWithFields(fields map[string]interface{}, err error) {
}
sanitisedFields := SanitiseFields(fields)
logBuffer := CheckToGetLogBuffer()
getLogger().WithFields(sanitisedFields).Warn(err)
CheckToStoreLogBuffer(logBuffer, log.WarnLevel)
logEntry := getLogger().WithFields(sanitisedFields)
if storeLogsUntilTriggered {
storeLogEntry(logEntry, err, log.WarnLevel)
} else {
logEntry.Warn(err)
}
}
func SQLDebugInfo(sql string) {
......@@ -262,11 +280,14 @@ func SQLDebugInfo(sql string) {
return
}
logBuffer := CheckToGetLogBuffer()
getLogger().WithFields(map[string]interface{}{
logEntry := getLogger().WithFields(map[string]interface{}{
"sql": sql,
}).Debug("SQL query")
CheckToStoreLogBuffer(logBuffer, log.InfoLevel)
})
if storeLogsUntilTriggered {
storeLogEntry(logEntry, "SQL query", log.DebugLevel)
} else {
logEntry.Debug("SQL query")
}
}
func LogShipmentID(id int64) {
......@@ -335,9 +356,12 @@ func LogApiAudit(fields log.Fields) {
return
}
logBuffer := CheckToGetLogBuffer()
getLogger().WithFields(fields).Info("api-audit-log")
CheckToStoreLogBuffer(logBuffer, log.InfoLevel)
logEntry := getLogger().WithFields(fields)
if storeLogsUntilTriggered {
storeLogEntry(logEntry, "api-audit-log", log.InfoLevel)
} else {
logEntry.Info("api-audit-log")
}
}
func LogSQSEvent(event events.SQSEvent) {
......@@ -375,8 +399,8 @@ func SetOutputToFile(file *os.File) {
log.SetOutput(file)
}
func SetOutputToBuffer(outputToLogBuffer bool) {
logToBuffer = outputToLogBuffer
func StoreLogsUntilTriggered(storeLogs bool) {
storeLogsUntilTriggered = storeLogs
}
func DisableLogging() {
......@@ -494,37 +518,30 @@ func (f *CustomLogFormatter) Format(entry *log.Entry) ([]byte, error) {
return b.Bytes(), nil
}
func CheckToGetLogBuffer() *bytes.Buffer {
if logToBuffer {
logBuffer := &bytes.Buffer{}
log.SetOutput(logBuffer)
return logBuffer
}
return nil
}
func CheckToStoreLogBuffer(logBuffer *bytes.Buffer, logLevel log.Level) {
if logBuffer != nil {
logBuffers = append(logBuffers, LogBufferWithLevel{
LogBuffer: logBuffer,
func storeLogEntry(logEntry *log.Entry, message interface{}, logLevel log.Level) {
if logEntry != nil &&
logEntry.Logger != nil &&
logEntry.Logger.IsLevelEnabled(logLevel) {
cachedLogEntries = append(cachedLogEntries, LogEntryWithLevel{
LogEntry: logEntry,
Message: message,
LogLevel: logLevel,
})
}
}
func LogAllLogBuffers() {
func LogAllStoredLogs() {
log.SetOutput(os.Stderr)
for _, logBuffer := range logBuffers {
switch logBuffer.LogLevel {
for _, cachedLogEntry := range cachedLogEntries {
switch cachedLogEntry.LogLevel {
case log.InfoLevel:
getLogger().Info(logBuffer.LogBuffer.String())
cachedLogEntry.LogEntry.Info(cachedLogEntry.Message)
case log.ErrorLevel:
getLogger().Error(logBuffer.LogBuffer.String())
cachedLogEntry.LogEntry.Error(cachedLogEntry.Message)
case log.WarnLevel:
getLogger().Warn(logBuffer.LogBuffer.String())
cachedLogEntry.LogEntry.Warn(cachedLogEntry.Message)
case log.DebugLevel:
getLogger().Debug(logBuffer.LogBuffer.String())
cachedLogEntry.LogEntry.Debug(cachedLogEntry.Message)
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment