diff options
Diffstat (limited to 'routers/private/manager.go')
-rw-r--r-- | routers/private/manager.go | 126 |
1 files changed, 72 insertions, 54 deletions
diff --git a/routers/private/manager.go b/routers/private/manager.go index 38ad83326f..8ed05da6a5 100644 --- a/routers/private/manager.go +++ b/routers/private/manager.go @@ -10,7 +10,7 @@ import ( "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/graceful" - "code.gitea.io/gitea/modules/json" + "code.gitea.io/gitea/modules/graceful/releasereopen" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/private" "code.gitea.io/gitea/modules/queue" @@ -46,19 +46,19 @@ func FlushQueues(ctx *context.PrivateContext) { // PauseLogging pauses logging func PauseLogging(ctx *context.PrivateContext) { - log.Pause() + log.GetManager().PauseAll() ctx.PlainText(http.StatusOK, "success") } // ResumeLogging resumes logging func ResumeLogging(ctx *context.PrivateContext) { - log.Resume() + log.GetManager().ResumeAll() ctx.PlainText(http.StatusOK, "success") } // ReleaseReopenLogging releases and reopens logging files func ReleaseReopenLogging(ctx *context.PrivateContext) { - if err := log.ReleaseReopen(); err != nil { + if err := releasereopen.GetManager().ReleaseReopen(); err != nil { ctx.JSON(http.StatusInternalServerError, private.Response{ Err: fmt.Sprintf("Error during release and reopen: %v", err), }) @@ -75,90 +75,108 @@ func SetLogSQL(ctx *context.PrivateContext) { // RemoveLogger removes a logger func RemoveLogger(ctx *context.PrivateContext) { - group := ctx.Params("group") - name := ctx.Params("name") - ok, err := log.GetLogger(group).DelLogger(name) + logger := ctx.Params("logger") + writer := ctx.Params("writer") + err := log.GetManager().GetLogger(logger).RemoveWriter(writer) if err != nil { ctx.JSON(http.StatusInternalServerError, private.Response{ - Err: fmt.Sprintf("Failed to remove logger: %s %s %v", group, name, err), + Err: fmt.Sprintf("Failed to remove log writer: %s %s %v", logger, writer, err), }) return } - if ok { - setting.RemoveSubLogDescription(group, name) - } - ctx.PlainText(http.StatusOK, fmt.Sprintf("Removed %s %s", group, name)) + ctx.PlainText(http.StatusOK, fmt.Sprintf("Removed %s %s", logger, writer)) } // AddLogger adds a logger func AddLogger(ctx *context.PrivateContext) { opts := web.GetForm(ctx).(*private.LoggerOptions) - if len(opts.Group) == 0 { - opts.Group = log.DEFAULT + + if len(opts.Logger) == 0 { + opts.Logger = log.DEFAULT } - if _, ok := opts.Config["flags"]; !ok { - switch opts.Group { + + writerMode := log.WriterMode{} + writerType := opts.Mode + + var flags string + var ok bool + if flags, ok = opts.Config["flags"].(string); !ok { + switch opts.Logger { case "access": - opts.Config["flags"] = log.FlagsFromString("") + flags = "" case "router": - opts.Config["flags"] = log.FlagsFromString("date,time") + flags = "date,time" default: - opts.Config["flags"] = log.FlagsFromString("stdflags") + flags = "stdflags" } } + writerMode.Flags = log.FlagsFromString(flags) - if _, ok := opts.Config["colorize"]; !ok && opts.Mode == "console" { + if writerMode.Colorize, ok = opts.Config["colorize"].(bool); !ok && opts.Mode == "console" { if _, ok := opts.Config["stderr"]; ok { - opts.Config["colorize"] = log.CanColorStderr + writerMode.Colorize = log.CanColorStderr } else { - opts.Config["colorize"] = log.CanColorStdout + writerMode.Colorize = log.CanColorStdout } } - if _, ok := opts.Config["level"]; !ok { - opts.Config["level"] = setting.Log.Level + writerMode.Level = setting.Log.Level + if level, ok := opts.Config["level"].(string); ok { + writerMode.Level = log.LevelFromString(level) } - if _, ok := opts.Config["stacktraceLevel"]; !ok { - opts.Config["stacktraceLevel"] = setting.Log.StacktraceLogLevel + writerMode.StacktraceLevel = setting.Log.StacktraceLogLevel + if stacktraceLevel, ok := opts.Config["level"].(string); ok { + writerMode.StacktraceLevel = log.LevelFromString(stacktraceLevel) } - if opts.Mode == "file" { - if _, ok := opts.Config["maxsize"]; !ok { - opts.Config["maxsize"] = 1 << 28 + writerMode.Prefix, _ = opts.Config["prefix"].(string) + writerMode.Expression, _ = opts.Config["expression"].(string) + + switch writerType { + case "console": + writerOption := log.WriterConsoleOption{} + writerOption.Stderr, _ = opts.Config["stderr"].(bool) + writerMode.WriterOption = writerOption + case "file": + writerOption := log.WriterFileOption{} + fileName, _ := opts.Config["filename"].(string) + writerOption.FileName = setting.LogPrepareFilenameForWriter(fileName, opts.Writer+".log") + writerOption.LogRotate = opts.Config["rotate"].(bool) + maxSizeShift, _ := opts.Config["maxsize"].(int) + if maxSizeShift == 0 { + maxSizeShift = 28 } - if _, ok := opts.Config["maxdays"]; !ok { - opts.Config["maxdays"] = 7 + writerOption.MaxSize = 1 << maxSizeShift + writerOption.DailyRotate, _ = opts.Config["daily"].(bool) + writerOption.MaxDays, _ = opts.Config["maxdays"].(int) + if writerOption.MaxDays == 0 { + writerOption.MaxDays = 7 } - if _, ok := opts.Config["compressionLevel"]; !ok { - opts.Config["compressionLevel"] = -1 + writerOption.Compress, _ = opts.Config["compress"].(bool) + writerOption.CompressionLevel, _ = opts.Config["compressionLevel"].(int) + if writerOption.CompressionLevel == 0 { + writerOption.CompressionLevel = -1 } + writerMode.WriterOption = writerOption + case "conn": + writerOption := log.WriterConnOption{} + writerOption.ReconnectOnMsg, _ = opts.Config["reconnectOnMsg"].(bool) + writerOption.Reconnect, _ = opts.Config["reconnect"].(bool) + writerOption.Protocol, _ = opts.Config["net"].(string) + writerOption.Addr, _ = opts.Config["address"].(string) + writerMode.WriterOption = writerOption + default: + panic(fmt.Sprintf("invalid log writer mode: %s", writerType)) } - - bufferLen := setting.Log.BufferLength - byteConfig, err := json.Marshal(opts.Config) + writer, err := log.NewEventWriter(opts.Writer, writerType, writerMode) if err != nil { - log.Error("Failed to marshal log configuration: %v %v", opts.Config, err) - ctx.JSON(http.StatusInternalServerError, private.Response{ - Err: fmt.Sprintf("Failed to marshal log configuration: %v %v", opts.Config, err), - }) - return - } - config := string(byteConfig) - - if err := log.NewNamedLogger(opts.Group, bufferLen, opts.Name, opts.Mode, config); err != nil { - log.Error("Failed to create new named logger: %s %v", config, err) + log.Error("Failed to create new log writer: %v", err) ctx.JSON(http.StatusInternalServerError, private.Response{ - Err: fmt.Sprintf("Failed to create new named logger: %s %v", config, err), + Err: fmt.Sprintf("Failed to create new log writer: %v", err), }) return } - - setting.AddSubLogDescription(opts.Group, setting.SubLogDescription{ - Name: opts.Name, - Provider: opts.Mode, - Config: config, - }) - + log.GetManager().GetLogger(opts.Logger).AddWriters(writer) ctx.PlainText(http.StatusOK, "success") } |