Skip to content

Commit 2045bb1

Browse files
authored
Merge pull request #13 from gaudiumsoftware/topic-simplica-arquivos-log
Adiciona o logger v2 para criar arquivos de log de nome único e que não rotacionam internamente
2 parents 422cd2b + 86c2120 commit 2045bb1

4 files changed

Lines changed: 521 additions & 301 deletions

File tree

mchlogcommon/mchlogcommon.go

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package mchlogcommon
2+
3+
import (
4+
"encoding/json"
5+
"errors"
6+
"fmt"
7+
"reflect"
8+
9+
"github.com/rs/zerolog"
10+
)
11+
12+
// GetJSONLogger retorna o evento de log correspondente
13+
// pronto para ser persistido no arquivo.
14+
func GetJSONLogger(logger *zerolog.Logger, content any) (*zerolog.Event, error) {
15+
var err error
16+
var event *zerolog.Event
17+
var ok bool
18+
19+
v := reflect.ValueOf(content)
20+
switch v.Kind() {
21+
case reflect.Map:
22+
var m map[string]any
23+
if m, ok = content.(map[string]any); !ok {
24+
m = make(map[string]any)
25+
keys := v.MapKeys()
26+
for _, k := range keys {
27+
va := v.MapIndex(k)
28+
switch va.Kind() {
29+
case reflect.String:
30+
m[k.String()] = va.String()
31+
case reflect.Int, reflect.Int64, reflect.Int32:
32+
m[k.String()] = va.Int()
33+
case reflect.Float64, reflect.Float32:
34+
m[k.String()] = va.Float()
35+
}
36+
}
37+
}
38+
event = logger.Log().Fields(m)
39+
40+
case reflect.Slice, reflect.Array:
41+
var arrb []byte
42+
if arrb, ok = content.([]byte); ok {
43+
var m map[string]any
44+
if err = json.Unmarshal(arrb, &m); err == nil {
45+
event = logger.Log().Fields(m)
46+
}
47+
} else {
48+
var arr []any
49+
if arr, ok = content.([]any); !ok {
50+
tam := v.Len()
51+
for i := 0; i < tam; i++ {
52+
va := v.Index(i)
53+
switch va.Kind() {
54+
case reflect.String:
55+
arr = append(arr, va.String())
56+
case reflect.Int, reflect.Int64, reflect.Int32:
57+
arr = append(arr, va.Int())
58+
case reflect.Float64, reflect.Float32:
59+
arr = append(arr, va.Float())
60+
}
61+
}
62+
}
63+
event = logger.Log().Fields(arr)
64+
}
65+
case reflect.String:
66+
s := content.(string)
67+
var m map[string]any
68+
if err = json.Unmarshal([]byte(s), &m); err == nil {
69+
event = logger.Log().Fields(m)
70+
}
71+
default:
72+
err = errors.New("")
73+
}
74+
75+
if err != nil {
76+
err = fmt.Errorf("tipo inválido do conteúdo do log: %v.\nEsperados map, json em formato de string ou []byte", v.Type())
77+
}
78+
79+
return event, err
80+
}

0 commit comments

Comments
 (0)