summaryrefslogtreecommitdiffstats
path: root/modules/log/event.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/log/event.go')
-rw-r--r--modules/log/event.go21
1 files changed, 20 insertions, 1 deletions
diff --git a/modules/log/event.go b/modules/log/event.go
index b20dac17c7..f66ecd179b 100644
--- a/modules/log/event.go
+++ b/modules/log/event.go
@@ -5,9 +5,13 @@
package log
import (
+ "context"
"fmt"
+ "runtime/pprof"
"sync"
"time"
+
+ "code.gitea.io/gitea/modules/process"
)
// Event represents a logging event
@@ -34,6 +38,8 @@ type EventLogger interface {
// ChannelledLog represents a cached channel to a LoggerProvider
type ChannelledLog struct {
+ ctx context.Context
+ finished context.CancelFunc
name string
provider string
queue chan *Event
@@ -44,8 +50,9 @@ type ChannelledLog struct {
}
// NewChannelledLog a new logger instance with given logger provider and config.
-func NewChannelledLog(name, provider, config string, bufferLength int64) (*ChannelledLog, error) {
+func NewChannelledLog(parent context.Context, name, provider, config string, bufferLength int64) (*ChannelledLog, error) {
if log, ok := providers[provider]; ok {
+
l := &ChannelledLog{
queue: make(chan *Event, bufferLength),
flush: make(chan bool),
@@ -58,6 +65,7 @@ func NewChannelledLog(name, provider, config string, bufferLength int64) (*Chann
}
l.name = name
l.provider = provider
+ l.ctx, _, l.finished = process.GetManager().AddTypedContext(parent, fmt.Sprintf("Logger: %s(%s)", l.name, l.provider), process.SystemProcessType, false)
go l.Start()
return l, nil
}
@@ -66,6 +74,8 @@ func NewChannelledLog(name, provider, config string, bufferLength int64) (*Chann
// Start processing the ChannelledLog
func (l *ChannelledLog) Start() {
+ pprof.SetGoroutineLabels(l.ctx)
+ defer l.finished()
for {
select {
case event, ok := <-l.queue:
@@ -140,6 +150,8 @@ func (l *ChannelledLog) GetName() string {
// MultiChannelledLog represents a cached channel to a LoggerProvider
type MultiChannelledLog struct {
+ ctx context.Context
+ finished context.CancelFunc
name string
bufferLength int64
queue chan *Event
@@ -156,7 +168,11 @@ type MultiChannelledLog struct {
// NewMultiChannelledLog a new logger instance with given logger provider and config.
func NewMultiChannelledLog(name string, bufferLength int64) *MultiChannelledLog {
+ ctx, _, finished := process.GetManager().AddTypedContext(context.Background(), fmt.Sprintf("Logger: %s", name), process.SystemProcessType, false)
+
m := &MultiChannelledLog{
+ ctx: ctx,
+ finished: finished,
name: name,
queue: make(chan *Event, bufferLength),
flush: make(chan bool),
@@ -277,6 +293,9 @@ func (m *MultiChannelledLog) Start() {
m.rwmutex.Unlock()
return
}
+ pprof.SetGoroutineLabels(m.ctx)
+ defer m.finished()
+
m.started = true
m.rwmutex.Unlock()
paused := false