mirror of
https://gitea.com/gitea/runner.git
synced 2026-11-04 22:37:55 +00:00
After https://gitea.com/gitea/runner/pulls/1304, logrus stayed only to forward logs from docker/cli and moby/go-archive. The runner used a small part of those: volume parsing, the build context tar, the `ssh://` connection and registry credentials. Own code that matches them replaces them, so logrus leaves the module graph. docker/cli stays for its logrus-free `opts` and `connhelper/ssh` packages. Other dependencies that the standard library or existing ones cover go too: mergo, httprouter (replaced by `http.ServeMux`), retry-go, go-isatty, go-selinux, container-device-interface, gotest.tools and go-cmp (replaced by testify). The binary shrinks by 5%. Behaviour differences: 1. An unreadable file in a build context is skipped with a warning, where go-archive left a truncated tar. 2. Build contexts no longer carry `security.capability` xattrs. 3. The cache and artifact servers answer HEAD on GET routes, and no longer redirect trailing slashes or answer OPTIONS. *Written by Claude.* --------- Co-authored-by: bircni <[email protected]> Reviewed-on: https://gitea.com/gitea/runner/pulls/1319 Reviewed-by: bircni <[email protected]> Reviewed-by: Lunny Xiao <[email protected]> Co-authored-by: silverwind <[email protected]>
86 lines
3.0 KiB
Go
86 lines
3.0 KiB
Go
// Copyright 2026 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package logging
|
|
|
|
import (
|
|
"io"
|
|
"log/slog"
|
|
"os"
|
|
"runtime"
|
|
"sync/atomic"
|
|
)
|
|
|
|
// TextOptions describes how the process-wide Logger writes a record as text.
|
|
type TextOptions struct {
|
|
DisableColors bool
|
|
DisableTimestamp bool
|
|
FullTimestamp bool
|
|
// CallerPrettyfier renames the function and file reported with a record when ReportCaller is on.
|
|
CallerPrettyfier func(*runtime.Frame) (function, file string)
|
|
// Filter rewrites each formatted line, for example to mask secrets.
|
|
Filter func(line []byte) []byte
|
|
}
|
|
|
|
var (
|
|
std atomic.Pointer[Logger]
|
|
stdState = newConsole(os.Stderr)
|
|
)
|
|
|
|
func init() {
|
|
std.Store(New(NewSlogHandler(&consoleHandler{c: stdState})))
|
|
}
|
|
|
|
// Default returns the process-wide Logger.
|
|
func Default() *Logger { return std.Load() }
|
|
|
|
// SetDefault replaces the process-wide Logger, which tests use to capture what the package
|
|
// functions log. SetLevel, GetLevel, SetOutput and the format functions keep configuring the
|
|
// initial console Logger.
|
|
func SetDefault(l *Logger) { std.Store(l) }
|
|
|
|
// SetLevel sets the minimum level of the initial process-wide Logger.
|
|
func SetLevel(level Level) { stdState.level.Set(slog.Level(level)) }
|
|
|
|
// GetLevel returns the minimum level of the initial process-wide Logger.
|
|
func GetLevel() Level { return Level(stdState.level.Level()) }
|
|
|
|
// SetOutput sets where the initial process-wide Logger writes.
|
|
func SetOutput(w io.Writer) { stdState.setOutput(w) }
|
|
|
|
// Output returns where the initial process-wide Logger writes.
|
|
func Output() io.Writer {
|
|
stdState.mu.Lock()
|
|
defer stdState.mu.Unlock()
|
|
return stdState.out
|
|
}
|
|
|
|
// SetTextFormat sets the text format of the initial process-wide Logger.
|
|
func SetTextFormat(o TextOptions) {
|
|
stdState.mu.Lock()
|
|
defer stdState.mu.Unlock()
|
|
stdState.opts = o
|
|
}
|
|
|
|
// SetReportCaller makes the initial process-wide Logger record where each call came from, which costs time.
|
|
func SetReportCaller(on bool) {
|
|
stdState.mu.Lock()
|
|
defer stdState.mu.Unlock()
|
|
stdState.reportCaller = on
|
|
}
|
|
|
|
func Enabled(level Level) bool { return Default().Enabled(level) }
|
|
|
|
func With(args ...any) *Logger { return Default().With(args...) }
|
|
func WithError(err error) *Logger { return Default().WithError(err) }
|
|
func Tracef(format string, args ...any) { Default().logf(LevelTrace, format, args) }
|
|
func Debugf(format string, args ...any) { Default().logf(LevelDebug, format, args) }
|
|
func Infof(format string, args ...any) { Default().logf(LevelInfo, format, args) }
|
|
func Warnf(format string, args ...any) { Default().logf(LevelWarn, format, args) }
|
|
func Errorf(format string, args ...any) { Default().logf(LevelError, format, args) }
|
|
func Trace(args ...any) { Default().log(LevelTrace, args) }
|
|
func Debug(args ...any) { Default().log(LevelDebug, args) }
|
|
func Info(args ...any) { Default().log(LevelInfo, args) }
|
|
func Warn(args ...any) { Default().log(LevelWarn, args) }
|
|
func Error(args ...any) { Default().log(LevelError, args) }
|