+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: Apache-2.0
+
package httpserver
import (
+ "fmt"
"log"
- "strings"
)
-var escaper = strings.NewReplacer("\"", "\\\"", "\\", "\\\\", "\n", "\\n")
-
// Log calls log.Println but first transforms strings so they are
// safer to write in logs (e.g., 'foo"bar' becomes
-// '"foo\"bar"'). Non-string args are left alone.
+// '"foo\"bar"'). Arguments that aren't strings and don't have a
+// (String() string) method are left alone.
func Log(args ...interface{}) {
newargs := make([]interface{}, len(args))
for i, arg := range args {
if s, ok := arg.(string); ok {
- newargs[i] = "\"" + escaper.Replace(s) + "\""
+ newargs[i] = fmt.Sprintf("%+q", s)
+ } else if s, ok := arg.(fmt.Stringer); ok {
+ newargs[i] = fmt.Sprintf("%+q", s.String())
} else {
newargs[i] = arg
}