Browse Source

Allow Macaron to be set to log through to gitea.log (#5667)

* Allow Macaron to be set to log through gitea.log

Fix #4291
tags/v1.9.0-dev
zeripath techknowlogick 6 years ago
parent
commit
c11a51e2bc
4 changed files with 75 additions and 7 deletions
  1. +1
    -0
      docs/content/doc/advanced/config-cheat-sheet.en-us.md
  2. +42
    -0
      modules/log/log.go
  3. +6
    -4
      modules/setting/setting.go
  4. +26
    -3
      routers/routes/routes.go

+ 1
- 0
docs/content/doc/advanced/config-cheat-sheet.en-us.md View File

@@ -279,6 +279,7 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`.
- `ROOT_PATH`: **\<empty\>**: Root path for log files.
- `MODE`: **console**: Logging mode. For multiple modes, use a comma to separate values.
- `LEVEL`: **Trace**: General log level. \[Trace, Debug, Info, Warn, Error, Critical\]
- `REDIRECT_MACARON_LOG`: **false**: Redirects the Macaron log to the Gitea logger.

## Cron (`cron`)



+ 42
- 0
modules/log/log.go View File

@@ -154,6 +154,48 @@ type LoggerInterface interface {

type loggerType func() LoggerInterface

// LoggerAsWriter is a io.Writer shim around the gitea log
type LoggerAsWriter struct {
level int
}

// NewLoggerAsWriter creates a Writer representation of the logger with setable log level
func NewLoggerAsWriter(level string) *LoggerAsWriter {
l := &LoggerAsWriter{}
switch strings.ToUpper(level) {
case "TRACE":
l.level = TRACE
case "DEBUG":
l.level = DEBUG
case "INFO":
l.level = INFO
case "WARN":
l.level = WARN
case "ERROR":
l.level = ERROR
case "CRITICAL":
l.level = CRITICAL
case "FATAL":
l.level = FATAL
default:
l.level = INFO
}
return l
}

// Write implements the io.Writer interface to allow spoofing of macaron
func (l *LoggerAsWriter) Write(p []byte) (int, error) {
l.Log(string(p))
return len(p), nil
}

// Log takes a given string and logs it at the set log-level
func (l *LoggerAsWriter) Log(msg string) {
for _, logger := range loggers {
logger.writerMsg(0, l.level, msg)
}
}

var adapters = make(map[string]loggerType)

// Register registers given logger provider to adapters.


+ 6
- 4
modules/setting/setting.go View File

@@ -393,10 +393,11 @@ var (
LibravatarService *libravatar.Libravatar

// Log settings
LogLevel string
LogRootPath string
LogModes []string
LogConfigs []string
LogLevel string
LogRootPath string
LogModes []string
LogConfigs []string
RedirectMacaronLog bool

// Attachment settings
AttachmentPath string
@@ -767,6 +768,7 @@ func NewContext() {
LogLevel = getLogLevel("log", "LEVEL", "Info")
LogRootPath = Cfg.Section("log").Key("ROOT_PATH").MustString(path.Join(AppWorkPath, "log"))
forcePathSeparator(LogRootPath)
RedirectMacaronLog = Cfg.Section("log").Key("REDIRECT_MACARON_LOG").MustBool(false)

sec := Cfg.Section("server")
AppName = Cfg.Section("").Key("APP_NAME").MustString("Gitea: Git with a cup of tea")


+ 26
- 3
routers/routes/routes.go View File

@@ -6,6 +6,7 @@ package routes

import (
"encoding/gob"
"fmt"
"net/http"
"os"
"path"
@@ -45,12 +46,34 @@ import (
macaron "gopkg.in/macaron.v1"
)

func giteaLogger(l *log.LoggerAsWriter) macaron.Handler {
return func(ctx *macaron.Context) {
start := time.Now()

l.Log(fmt.Sprintf("[Macaron] Started %s %s for %s", ctx.Req.Method, ctx.Req.RequestURI, ctx.RemoteAddr()))

ctx.Next()

rw := ctx.Resp.(macaron.ResponseWriter)
l.Log(fmt.Sprintf("[Macaron] Completed %s %s %v %s in %v", ctx.Req.Method, ctx.Req.RequestURI, rw.Status(), http.StatusText(rw.Status()), time.Since(start)))
}
}

// NewMacaron initializes Macaron instance.
func NewMacaron() *macaron.Macaron {
gob.Register(&u2f.Challenge{})
m := macaron.New()
if !setting.DisableRouterLog {
m.Use(macaron.Logger())
var m *macaron.Macaron
if setting.RedirectMacaronLog {
loggerAsWriter := log.NewLoggerAsWriter("INFO")
m = macaron.NewWithLogger(loggerAsWriter)
if !setting.DisableRouterLog {
m.Use(giteaLogger(loggerAsWriter))
}
} else {
m = macaron.New()
if !setting.DisableRouterLog {
m.Use(macaron.Logger())
}
}
m.Use(macaron.Recovery())
if setting.EnableGzip {


Loading…
Cancel
Save