diff --git a/source.go b/source.go index 3acf6b8..94b7ee5 100644 --- a/source.go +++ b/source.go @@ -86,7 +86,7 @@ func (l Source) MarshalText() ([]byte, error) { } func (l Source) MarshalJSON() ([]byte, error) { - return fmt.Appendf([]byte{}, `{"file":"%s","line":%d,"func":"%s"}`, l.File, l.Line, l.Func), nil + return fmt.Appendf([]byte{}, `{"file":%q,"line":%d,"func":"%s"}`, l.File, l.Line, l.Func), nil } func errSourceField(skip, mframe int) field.Field { diff --git a/source_test.go b/source_test.go new file mode 100644 index 0000000..8587184 --- /dev/null +++ b/source_test.go @@ -0,0 +1,23 @@ +package log_test + +import ( + "encoding/json" + "testing" + + "gitoa.ru/go-4devs/log" +) + +func TestSource_MarshalJSON(t *testing.T) { + t.Parallel() + + src := log.Source{ + Func: "fn name", + File: `file " \n name`, + Line: 42, + } + + data, err := json.Marshal(src) + if err != nil || len(data) == 0 || string(data) != `{"file":"file \" \\n name","line":42,"func":"fn name"}` { + t.Fatalf("failed marshal: err=%v, data=%v", err, string(data)) + } +}