(new): JSON HTML escaping control
Golang lint / lint (push) Successful in 45s

- add Formatter.JSONEscapeHTML and SetJSONEscapeHTML to let JSON writers preserve HTML-sensitive characters when needed while keeping escaping enabled by default.
- switch JSON output to json.Encoder, preserve existing Print/Println newline semantics, and cover the new escaping behavior in tests.
This commit is contained in:
2026-04-28 14:36:03 +03:00
parent a54a854a77
commit dd3c7286d2
5 changed files with 98 additions and 12 deletions
+16 -9
View File
@@ -1,6 +1,7 @@
package sneklog
import (
"bytes"
"encoding/json"
"fmt"
"io"
@@ -145,21 +146,27 @@ func (w *LoggerJsonWriter) Print(level LogLevel, prefix string, traceback []*Met
Message: s,
Traceback: traceback,
}
var data []byte
var err error
buf := bytes.NewBuffer(nil)
enc := json.NewEncoder(buf)
enc.SetEscapeHTML(f.JSONEscapeHTML)
if w.pretty {
data, err = json.MarshalIndent(m, "", " ")
} else {
data, err = json.Marshal(m)
enc.SetIndent("", " ")
}
err := enc.Encode(m)
if err != nil {
return err
}
if newline {
data = append(data, '\n')
data := buf.Bytes()
if !newline {
data = bytes.TrimSuffix(data, []byte("\n"))
}
_, err = w.Write(data)
return err
_, err = w.writer.Write(data)
if err != nil {
return err
}
return nil
}
// Close closes the owned writer, if any.