mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-07-07 09:55:41 +02:00
Some checks are pending
/ release (push) Waiting to run
testing-integration / test-unit (push) Waiting to run
testing-integration / test-sqlite (push) Waiting to run
testing / backend-checks (push) Waiting to run
testing / frontend-checks (push) Waiting to run
testing / test-unit (push) Blocked by required conditions
testing / test-e2e (push) Blocked by required conditions
testing / test-remote-cacher (redis) (push) Blocked by required conditions
testing / test-remote-cacher (valkey) (push) Blocked by required conditions
testing / test-remote-cacher (garnet) (push) Blocked by required conditions
testing / test-remote-cacher (redict) (push) Blocked by required conditions
testing / test-mysql (push) Blocked by required conditions
testing / test-pgsql (push) Blocked by required conditions
testing / test-sqlite (push) Blocked by required conditions
testing / security-check (push) Blocked by required conditions
This feature is intended to help reduce noisy logs generated by routine Kubernetes probes and Prometheus scraping. While logs are essential, these specific requests (e.g., to /metrics and /api/healthz) generally don't provide useful information and tend to clutter the output. The goal is to introduce functionality that effectively acts as the inverse of the existing EXPRESSION mode—allowing logging to be excluded based on a condition, rather than included. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8212 Reviewed-by: Gusted <gusted@noreply.codeberg.org> Co-authored-by: zokki <zokki.softwareschmiede@gmail.com> Co-committed-by: zokki <zokki.softwareschmiede@gmail.com>
55 lines
1.5 KiB
Go
55 lines
1.5 KiB
Go
// Copyright 2023 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package log
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
// EventWriter is the general interface for all event writers
|
|
// EventWriterBase is only used as its base interface
|
|
// A writer implementation could override the default EventWriterBase functions
|
|
// eg: a writer can override the Run to handle events in its own way with its own goroutine
|
|
type EventWriter interface {
|
|
EventWriterBase
|
|
}
|
|
|
|
// WriterMode is the mode for creating a new EventWriter, it contains common options for all writers
|
|
// Its WriterOption field is the specified options for a writer, it should be passed by value but not by pointer
|
|
type WriterMode struct {
|
|
BufferLen int
|
|
|
|
Level Level
|
|
Prefix string
|
|
Colorize bool
|
|
Flags Flags
|
|
|
|
Expression string
|
|
Exclusion string
|
|
|
|
StacktraceLevel Level
|
|
|
|
WriterOption any
|
|
}
|
|
|
|
// EventWriterProvider is the function for creating a new EventWriter
|
|
type EventWriterProvider func(writerName string, writerMode WriterMode) EventWriter
|
|
|
|
var eventWriterProviders = map[string]EventWriterProvider{}
|
|
|
|
func RegisterEventWriter(writerType string, p EventWriterProvider) {
|
|
eventWriterProviders[writerType] = p
|
|
}
|
|
|
|
func HasEventWriter(writerType string) bool {
|
|
_, ok := eventWriterProviders[writerType]
|
|
return ok
|
|
}
|
|
|
|
func NewEventWriter(name, writerType string, mode WriterMode) (EventWriter, error) {
|
|
if p, ok := eventWriterProviders[writerType]; ok {
|
|
return p(name, mode), nil
|
|
}
|
|
return nil, fmt.Errorf("unknown event writer type %q for writer %q", writerType, name)
|
|
}
|