mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-25 11:05:45 +00:00
log/filelogger: make filelogger remove redundant date before adding a date
At some point since filelogger was added on Windows, the log hierarchy above it changed such that a log.Printf writes to filelogger and includes the log package's own date. But then filelogger adds another. Rather than debug everything above and risk removing the prefix when run by tailscaled, instead just remove the log package's prefix very late right before we go to add the filelogger's own. Change-Id: I9db518f42c603ef83017f74827270f124fdf5c14 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
4a59a2781a
commit
49a3fcae78
@ -106,6 +106,7 @@ func (w *logFileWriter) appendToFileLocked(out []byte) {
|
||||
if w.fday != day {
|
||||
w.startNewFileLocked()
|
||||
}
|
||||
out = removeDatePrefix(out)
|
||||
if w.f != nil {
|
||||
// RFC3339Nano but with a fixed number (3) of nanosecond digits:
|
||||
const formatPre = "2006-01-02T15:04:05"
|
||||
@ -118,6 +119,30 @@ func (w *logFileWriter) appendToFileLocked(out []byte) {
|
||||
}
|
||||
}
|
||||
|
||||
func isNum(b byte) bool { return '0' <= b && b <= '9' }
|
||||
|
||||
// removeDatePrefix returns a subslice of v with the log package's
|
||||
// standard datetime prefix format removed, if present.
|
||||
func removeDatePrefix(v []byte) []byte {
|
||||
const format = "2009/01/23 01:23:23 "
|
||||
if len(v) < len(format) {
|
||||
return v
|
||||
}
|
||||
for i, b := range v[:len(format)] {
|
||||
fb := format[i]
|
||||
if isNum(fb) {
|
||||
if !isNum(b) {
|
||||
return v
|
||||
}
|
||||
continue
|
||||
}
|
||||
if b != fb {
|
||||
return v
|
||||
}
|
||||
}
|
||||
return v[len(format):]
|
||||
}
|
||||
|
||||
// startNewFileLocked opens a new log file for writing
|
||||
// and also cleans up any old files.
|
||||
//
|
||||
|
28
log/filelogger/log_test.go
Normal file
28
log/filelogger/log_test.go
Normal file
@ -0,0 +1,28 @@
|
||||
// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package filelogger
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestRemoveDatePrefix(t *testing.T) {
|
||||
tests := []struct {
|
||||
in, want string
|
||||
}{
|
||||
{"", ""},
|
||||
{"\n", "\n"},
|
||||
{"2009/01/23 01:23:23", "2009/01/23 01:23:23"},
|
||||
{"2009/01/23 01:23:23 \n", "\n"},
|
||||
{"2009/01/23 01:23:23 foo\n", "foo\n"},
|
||||
{"9999/01/23 01:23:23 foo\n", "foo\n"},
|
||||
{"2009_01/23 01:23:23 had an underscore\n", "2009_01/23 01:23:23 had an underscore\n"},
|
||||
}
|
||||
for i, tt := range tests {
|
||||
got := removeDatePrefix([]byte(tt.in))
|
||||
if string(got) != tt.want {
|
||||
t.Logf("[%d] removeDatePrefix(%q) = %q; want %q", i, tt.in, got, tt.want)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user