Select Git revision
logs.go 12.79 KiB
package logs
import (
"bytes"
"encoding/json"
"fmt"
"github.com/MindscapeHQ/raygun4go"
log "github.com/sirupsen/logrus"
"gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/date_utils"
"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"
"io"
"net/http"
"net/url"
"os"
"reflect"
"regexp"
"runtime"
"strings"
"github.com/aws/aws-lambda-go/events"
)
const (
FatalLevel = log.FatalLevel
ErrorLevel = log.ErrorLevel
WarnLevel = log.WarnLevel
InfoLevel = log.InfoLevel
DebugLevel = log.DebugLevel
)
type LogEntryWithLevel struct {
// LogBuffer *bytes.Buffer
LogEntry *log.Entry
Message interface{}
LogLevel log.Level
}
var logger *log.Entry
var cachedLogEntries []LogEntryWithLevel
var apiRequest *events.APIGatewayProxyRequest
var currentRequestID *string
var isDebug = false
var storeLogsUntilTriggered = false
var disableLogging = false
var build string
var raygunClient *raygun4go.Client
// Password filtering
var passwordRegex = regexp.MustCompile(`(?i:\\?"password\\?"\s*:\s*\\?"(.*)\\?").*`)
var byteArrayRegex = regexp.MustCompile(`(?i:\\?"(?i:[\w]*)(?i:byte|data)(?i:[\w]*)\\?"\s*:\s*\[([\d\s,]+)*\])`)
func SanitiseLogs(logString string) string {
var isValidJsonString bool
isValidJsonString, logString = string_utils.PrettyJSON(logString)
if !isValidJsonString {
return logString
}
logString = MaskByteArraysInJsonString(logString)
logString = MaskPasswordsInJsonString(logString)
return logString
}
// MaskPasswordsInJsonString takes a string and sanitises all the instances of fields named password.
// E.g. "{"password": "xyz123"}" will become "{"password": "***"}"
func MaskPasswordsInJsonString(jsonString string) string {