Skip to content
Snippets Groups Projects
Select Git revision
1 result Searching

logs.go

Blame
  • 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 {