$27 GRAYBYTE WORDPRESS FILE MANAGER $76

SERVER : in-mum-web1330.main-hosting.eu #1 SMP Mon Feb 10 22:45:17 UTC 2025
SERVER IP : 2.57.91.66 | ADMIN IP 216.73.216.215
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/opt/go/pkg/mod/github.com/go-kit/log@v0.2.1/

HOME
Current File : /opt/go/pkg/mod/github.com/go-kit/log@v0.2.1//json_logger.go
package log

import (
	"encoding"
	"encoding/json"
	"fmt"
	"io"
	"reflect"
)

type jsonLogger struct {
	io.Writer
}

// NewJSONLogger returns a Logger that encodes keyvals to the Writer as a
// single JSON object. Each log event produces no more than one call to
// w.Write. The passed Writer must be safe for concurrent use by multiple
// goroutines if the returned Logger will be used concurrently.
func NewJSONLogger(w io.Writer) Logger {
	return &jsonLogger{w}
}

func (l *jsonLogger) Log(keyvals ...interface{}) error {
	n := (len(keyvals) + 1) / 2 // +1 to handle case when len is odd
	m := make(map[string]interface{}, n)
	for i := 0; i < len(keyvals); i += 2 {
		k := keyvals[i]
		var v interface{} = ErrMissingValue
		if i+1 < len(keyvals) {
			v = keyvals[i+1]
		}
		merge(m, k, v)
	}
	enc := json.NewEncoder(l.Writer)
	enc.SetEscapeHTML(false)
	return enc.Encode(m)
}

func merge(dst map[string]interface{}, k, v interface{}) {
	var key string
	switch x := k.(type) {
	case string:
		key = x
	case fmt.Stringer:
		key = safeString(x)
	default:
		key = fmt.Sprint(x)
	}

	// We want json.Marshaler and encoding.TextMarshaller to take priority over
	// err.Error() and v.String(). But json.Marshall (called later) does that by
	// default so we force a no-op if it's one of those 2 case.
	switch x := v.(type) {
	case json.Marshaler:
	case encoding.TextMarshaler:
	case error:
		v = safeError(x)
	case fmt.Stringer:
		v = safeString(x)
	}

	dst[key] = v
}

func safeString(str fmt.Stringer) (s string) {
	defer func() {
		if panicVal := recover(); panicVal != nil {
			if v := reflect.ValueOf(str); v.Kind() == reflect.Ptr && v.IsNil() {
				s = "NULL"
			} else {
				s = fmt.Sprintf("PANIC in String method: %v", panicVal)
			}
		}
	}()
	s = str.String()
	return
}

func safeError(err error) (s interface{}) {
	defer func() {
		if panicVal := recover(); panicVal != nil {
			if v := reflect.ValueOf(err); v.Kind() == reflect.Ptr && v.IsNil() {
				s = nil
			} else {
				s = fmt.Sprintf("PANIC in Error method: %v", panicVal)
			}
		}
	}()
	s = err.Error()
	return
}

Current_dir [ NOT WRITEABLE ] Document_root [ WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
25 Jan 2024 4.43 PM
root / root
0755
.github
--
25 Jan 2024 4.43 PM
root / root
0555
level
--
25 Jan 2024 4.43 PM
root / root
0555
syslog
--
25 Jan 2024 4.43 PM
root / root
0555
term
--
25 Jan 2024 4.43 PM
root / root
0555
.gitignore
0.263 KB
25 Jan 2024 4.43 PM
root / root
0444
LICENSE
1.038 KB
25 Jan 2024 4.43 PM
root / root
0444
README.md
5.19 KB
25 Jan 2024 4.43 PM
root / root
0444
benchmark_test.go
0.433 KB
25 Jan 2024 4.43 PM
root / root
0444
concurrency_test.go
0.638 KB
25 Jan 2024 4.43 PM
root / root
0444
doc.go
5.229 KB
25 Jan 2024 4.43 PM
root / root
0444
example_test.go
2.714 KB
25 Jan 2024 4.43 PM
root / root
0444
go.mod
0.08 KB
25 Jan 2024 4.43 PM
root / root
0444
go.sum
0.169 KB
25 Jan 2024 4.43 PM
root / root
0444
json_logger.go
2.03 KB
25 Jan 2024 4.43 PM
root / root
0444
json_logger_test.go
4.609 KB
25 Jan 2024 4.43 PM
root / root
0444
log.go
6.315 KB
25 Jan 2024 4.43 PM
root / root
0444
log_test.go
8.65 KB
25 Jan 2024 4.43 PM
root / root
0444
logfmt_logger.go
1.345 KB
25 Jan 2024 4.43 PM
root / root
0444
logfmt_logger_test.go
1.378 KB
25 Jan 2024 4.43 PM
root / root
0444
nop_logger.go
0.201 KB
25 Jan 2024 4.43 PM
root / root
0444
nop_logger_test.go
0.49 KB
25 Jan 2024 4.43 PM
root / root
0444
staticcheck.conf
0.017 KB
25 Jan 2024 4.43 PM
root / root
0444
stdlib.go
4.163 KB
25 Jan 2024 4.43 PM
root / root
0444
stdlib_test.go
9.264 KB
25 Jan 2024 4.43 PM
root / root
0444
sync.go
3.176 KB
25 Jan 2024 4.43 PM
root / root
0444
sync_test.go
1.993 KB
25 Jan 2024 4.43 PM
root / root
0444
value.go
3.335 KB
25 Jan 2024 4.43 PM
root / root
0444
value_test.go
3.837 KB
25 Jan 2024 4.43 PM
root / root
0444

GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME
Static GIF