- 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:
+16
-9
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user