aboutsummaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorᴜɴᴋɴᴡᴏɴ <u@gogs.io>2020-09-29 22:26:07 +0800
committerGitHub <noreply@github.com>2020-09-29 22:26:07 +0800
commit7bc3ee49aa317e48331cf6e39e1911ac89b2e325 (patch)
tree8d5a515c79061e67f2164e696c189a8d99ce0fcd /internal
parent8fc40132401747dbd2a39dbb6869eb1652a2f882 (diff)
cmd/serv: use different log files for ORMs in hook mode (#6361)
Diffstat (limited to 'internal')
-rw-r--r--internal/cmd/hook.go6
-rw-r--r--internal/cmd/serv.go7
-rw-r--r--internal/db/db.go7
-rw-r--r--internal/db/models.go33
4 files changed, 34 insertions, 19 deletions
diff --git a/internal/cmd/hook.go b/internal/cmd/hook.go
index 9b4e2278..99a5e15b 100644
--- a/internal/cmd/hook.go
+++ b/internal/cmd/hook.go
@@ -66,7 +66,7 @@ func runHookPreReceive(c *cli.Context) error {
if len(os.Getenv("SSH_ORIGINAL_COMMAND")) == 0 {
return nil
}
- setup(c, "hooks/pre-receive.log", true)
+ setup(c, "pre-receive.log", true)
isWiki := strings.Contains(os.Getenv(db.ENV_REPO_CUSTOM_HOOKS_PATH), ".wiki.git/")
@@ -159,7 +159,7 @@ func runHookUpdate(c *cli.Context) error {
if len(os.Getenv("SSH_ORIGINAL_COMMAND")) == 0 {
return nil
}
- setup(c, "hooks/update.log", false)
+ setup(c, "update.log", false)
args := c.Args()
if len(args) != 3 {
@@ -193,7 +193,7 @@ func runHookPostReceive(c *cli.Context) error {
if len(os.Getenv("SSH_ORIGINAL_COMMAND")) == 0 {
return nil
}
- setup(c, "hooks/post-receive.log", true)
+ setup(c, "post-receive.log", true)
// Post-receive hook does more than just gather Git information,
// so we need to setup additional services for email notifications.
diff --git a/internal/cmd/serv.go b/internal/cmd/serv.go
index 4c9bb4ca..06d78a6d 100644
--- a/internal/cmd/serv.go
+++ b/internal/cmd/serv.go
@@ -38,7 +38,7 @@ var Serv = cli.Command{
// logs error message on the server side. When not in "prod" mode,
// error message is also printed to the client for easier debugging.
func fail(userMessage, errMessage string, args ...interface{}) {
- fmt.Fprintln(os.Stderr, "Gogs:", userMessage)
+ _, _ = fmt.Fprintln(os.Stderr, "Gogs:", userMessage)
if len(errMessage) > 0 {
if !conf.IsProdMode() {
@@ -47,10 +47,11 @@ func fail(userMessage, errMessage string, args ...interface{}) {
log.Error(errMessage, args...)
}
+ log.Stop()
os.Exit(1)
}
-func setup(c *cli.Context, logPath string, connectDB bool) {
+func setup(c *cli.Context, logFile string, connectDB bool) {
conf.HookMode = true
var customConf string
@@ -73,7 +74,7 @@ func setup(c *cli.Context, logPath string, connectDB bool) {
err = log.NewFile(log.FileConfig{
Level: level,
- Filename: filepath.Join(conf.Log.RootPath, logPath),
+ Filename: filepath.Join(conf.Log.RootPath, "hooks", logFile),
FileRotationConfig: log.FileRotationConfig{
Rotate: true,
Daily: true,
diff --git a/internal/db/db.go b/internal/db/db.go
index c3e3f19a..7f82c43f 100644
--- a/internal/db/db.go
+++ b/internal/db/db.go
@@ -145,12 +145,7 @@ var Tables = []interface{}{
new(LFSObject), new(LoginSource),
}
-func Init() (*gorm.DB, error) {
- w, err := newLogWriter()
- if err != nil {
- return nil, errors.Wrap(err, "new log writer")
- }
-
+func Init(w logger.Writer) (*gorm.DB, error) {
level := logger.Info
if conf.IsProdMode() {
level = logger.Warn
diff --git a/internal/db/models.go b/internal/db/models.go
index 52ef4495..ac9cbe32 100644
--- a/internal/db/models.go
+++ b/internal/db/models.go
@@ -10,16 +10,20 @@ import (
"net/url"
"os"
"path"
+ "path/filepath"
"strings"
"time"
+ "github.com/pkg/errors"
"gorm.io/gorm"
+ "gorm.io/gorm/logger"
log "unknwon.dev/clog/v2"
"xorm.io/core"
"xorm.io/xorm"
"gogs.io/gogs/internal/conf"
"gogs.io/gogs/internal/db/migrations"
+ "gogs.io/gogs/internal/dbutil"
)
// Engine represents a XORM engine or session.
@@ -132,16 +136,21 @@ func SetEngine() (*gorm.DB, error) {
x.SetMapper(core.GonicMapper{})
- // WARNING: for serv command, MUST remove the output to os.stdout,
- // so use log file to instead print to stdout.
+ var logPath string
+ if conf.HookMode {
+ logPath = filepath.Join(conf.Log.RootPath, "hooks", "xorm.log")
+ } else {
+ logPath = filepath.Join(conf.Log.RootPath, "xorm.log")
+ }
sec := conf.File.Section("log.xorm")
- logger, err := log.NewFileWriter(path.Join(conf.Log.RootPath, "xorm.log"),
+ fileWriter, err := log.NewFileWriter(logPath,
log.FileRotationConfig{
Rotate: sec.Key("ROTATE").MustBool(true),
Daily: sec.Key("ROTATE_DAILY").MustBool(true),
MaxSize: sec.Key("MAX_SIZE").MustInt64(100) * 1024 * 1024,
MaxDays: sec.Key("MAX_DAYS").MustInt64(3),
- })
+ },
+ )
if err != nil {
return nil, fmt.Errorf("create 'xorm.log': %v", err)
}
@@ -151,12 +160,22 @@ func SetEngine() (*gorm.DB, error) {
x.SetConnMaxLifetime(time.Second)
if conf.IsProdMode() {
- x.SetLogger(xorm.NewSimpleLogger3(logger, xorm.DEFAULT_LOG_PREFIX, xorm.DEFAULT_LOG_FLAG, core.LOG_WARNING))
+ x.SetLogger(xorm.NewSimpleLogger3(fileWriter, xorm.DEFAULT_LOG_PREFIX, xorm.DEFAULT_LOG_FLAG, core.LOG_WARNING))
} else {
- x.SetLogger(xorm.NewSimpleLogger(logger))
+ x.SetLogger(xorm.NewSimpleLogger(fileWriter))
}
x.ShowSQL(true)
- return Init()
+
+ var gormLogger logger.Writer
+ if conf.HookMode {
+ gormLogger = &dbutil.Logger{Writer: fileWriter}
+ } else {
+ gormLogger, err = newLogWriter()
+ if err != nil {
+ return nil, errors.Wrap(err, "new log writer")
+ }
+ }
+ return Init(gormLogger)
}
func NewEngine() (err error) {