mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-08-21 09:51:10 +00:00
- It was possible for Forgejo adminstrators to configure the logger to log the goroutine PID that made the `Log` call.
- The need for the goroutine PID to be logged is that it might give insight which request or otherwise process made the log call by correlating the PID with other logs. However even for a single request I cannot make correlations between the goroutine PIDs and it seems that this particular need cannot be fulfilled by the current implementation.
- The gathering of this PID is discouraged, https://go.dev/doc/faq#no_goroutine_id, and the current implementation is a hack and can break in future Go releases; it has broken before in 61e21d7ded
.
- If the need arise, we instead should make the logger implementation context aware and use a PID that's associated with the context, which is guarantees to be consistent (this is also the more idiomatic way to achieve this functionality).
<!--start release-notes-assistant-->
## Release notes
<!--URL:https://codeberg.org/forgejo/forgejo-->
- Other changes without a feature or bug label
- [PR](https://codeberg.org/forgejo/forgejo/pulls/8851): <!--number 8851 --><!--line 0 --><!--description Y2hvcmU6IHJlbW92ZSBnb3JvdXRpbmUgUElEIGxvZ2dpbmc=-->chore: remove goroutine PID logging<!--description-->
<!--end release-notes-assistant-->
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8851
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Co-authored-by: Gusted <postmaster@gusted.xyz>
Co-committed-by: Gusted <postmaster@gusted.xyz>
109 lines
3.4 KiB
Go
109 lines
3.4 KiB
Go
// Copyright 2023 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package log
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestItoa(t *testing.T) {
|
|
b := itoa(nil, 0, 0)
|
|
assert.Equal(t, "0", string(b))
|
|
|
|
b = itoa(nil, 0, 1)
|
|
assert.Equal(t, "0", string(b))
|
|
|
|
b = itoa(nil, 0, 2)
|
|
assert.Equal(t, "00", string(b))
|
|
}
|
|
|
|
func TestEventFormatTextMessage(t *testing.T) {
|
|
res := EventFormatTextMessage(&WriterMode{Prefix: "[PREFIX] ", Colorize: false, Flags: Flags{defined: true, flags: 0xffffffff}},
|
|
&Event{
|
|
Time: time.Date(2020, 1, 2, 3, 4, 5, 6, time.UTC),
|
|
Caller: "caller",
|
|
Filename: "filename",
|
|
Line: 123,
|
|
Level: ERROR,
|
|
Stacktrace: "stacktrace",
|
|
},
|
|
"msg format: %v %v", "arg0", NewColoredValue("arg1", FgBlue),
|
|
)
|
|
|
|
assert.Equal(t, `<3>[PREFIX] 2020/01/02 03:04:05.000000 filename:123:caller [E] msg format: arg0 arg1
|
|
stacktrace
|
|
|
|
`, string(res))
|
|
|
|
res = EventFormatTextMessage(&WriterMode{Prefix: "[PREFIX] ", Colorize: true, Flags: Flags{defined: true, flags: 0xffffffff}},
|
|
&Event{
|
|
Time: time.Date(2020, 1, 2, 3, 4, 5, 6, time.UTC),
|
|
Caller: "caller",
|
|
Filename: "filename",
|
|
Line: 123,
|
|
Level: ERROR,
|
|
Stacktrace: "stacktrace",
|
|
},
|
|
"msg format: %v %v", "arg0", NewColoredValue("arg1", FgBlue),
|
|
)
|
|
|
|
assert.Equal(t, "<3>[PREFIX] \x1b[36m2020/01/02 03:04:05.000000 \x1b[0m\x1b[32mfilename:123:\x1b[32mcaller\x1b[0m \x1b[1;31m[E]\x1b[0m msg format: arg0 \x1b[34marg1\x1b[0m\n\tstacktrace\n\n", string(res))
|
|
}
|
|
|
|
func TestEventFormatTextMessageStd(t *testing.T) {
|
|
res := EventFormatTextMessage(&WriterMode{Prefix: "[PREFIX] ", Colorize: false, Flags: Flags{defined: true, flags: LstdFlags}},
|
|
&Event{
|
|
Time: time.Date(2020, 1, 2, 3, 4, 5, 6, time.UTC),
|
|
Caller: "caller",
|
|
Filename: "filename",
|
|
Line: 123,
|
|
Level: ERROR,
|
|
Stacktrace: "stacktrace",
|
|
},
|
|
"msg format: %v %v", "arg0", NewColoredValue("arg1", FgBlue),
|
|
)
|
|
|
|
assert.Equal(t, `[PREFIX] 2020/01/02 03:04:05 filename:123:caller [E] msg format: arg0 arg1
|
|
stacktrace
|
|
|
|
`, string(res))
|
|
|
|
res = EventFormatTextMessage(&WriterMode{Prefix: "[PREFIX] ", Colorize: true, Flags: Flags{defined: true, flags: LstdFlags}},
|
|
&Event{
|
|
Time: time.Date(2020, 1, 2, 3, 4, 5, 6, time.UTC),
|
|
Caller: "caller",
|
|
Filename: "filename",
|
|
Line: 123,
|
|
Level: ERROR,
|
|
Stacktrace: "stacktrace",
|
|
},
|
|
"msg format: %v %v", "arg0", NewColoredValue("arg1", FgBlue),
|
|
)
|
|
|
|
assert.Equal(t, "[PREFIX] \x1b[36m2020/01/02 03:04:05 \x1b[0m\x1b[32mfilename:123:\x1b[32mcaller\x1b[0m \x1b[1;31m[E]\x1b[0m msg format: arg0 \x1b[34marg1\x1b[0m\n\tstacktrace\n\n", string(res))
|
|
}
|
|
|
|
func TestEventFormatTextMessageJournal(t *testing.T) {
|
|
// TODO: it makes no sense to emit \n-containing messages to journal as they will get mangled
|
|
// the proper way here is to attach the backtrace as structured metadata, but we can't do that via stderr
|
|
res := EventFormatTextMessage(&WriterMode{Prefix: "[PREFIX] ", Colorize: false, Flags: Flags{defined: true, flags: LjournaldFlags}},
|
|
&Event{
|
|
Time: time.Date(2020, 1, 2, 3, 4, 5, 6, time.UTC),
|
|
Caller: "caller",
|
|
Filename: "filename",
|
|
Line: 123,
|
|
Level: ERROR,
|
|
Stacktrace: "stacktrace",
|
|
},
|
|
"msg format: %v %v", "arg0", NewColoredValue("arg1", FgBlue),
|
|
)
|
|
|
|
assert.Equal(t, `<3>[PREFIX] msg format: arg0 arg1
|
|
stacktrace
|
|
|
|
`, string(res))
|
|
}
|