aboutsummaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/cmd/serv.go3
-rw-r--r--internal/conf/log.go35
-rw-r--r--internal/conf/static.go2
-rw-r--r--internal/route/install.go2
4 files changed, 30 insertions, 12 deletions
diff --git a/internal/cmd/serv.go b/internal/cmd/serv.go
index 0efb139b..3478b720 100644
--- a/internal/cmd/serv.go
+++ b/internal/cmd/serv.go
@@ -49,6 +49,8 @@ func fail(userMessage, logMessage string, args ...interface{}) {
}
func setup(c *cli.Context, logPath string, connectDB bool) {
+ conf.HookMode = true
+
var customConf string
if c.IsSet("config") {
customConf = c.String("config")
@@ -60,6 +62,7 @@ func setup(c *cli.Context, logPath string, connectDB bool) {
if err != nil {
fail("Internal error", "Failed to init configuration: %v", err)
}
+ conf.InitLogging(true)
level := log.LevelTrace
if conf.IsProdMode() {
diff --git a/internal/conf/log.go b/internal/conf/log.go
index 3087c7c8..58e17f87 100644
--- a/internal/conf/log.go
+++ b/internal/conf/log.go
@@ -28,12 +28,19 @@ type logConf struct {
// Log settings
var Log *logConf
-// initLogConf returns parsed logging configuration from given INI file.
+// initLogConf returns parsed logging configuration from given INI file. When the
+// argument "hookMode" is true, it only initializes the root path for log files.
// NOTE: Because we always create a console logger as the primary logger at init time,
// we need to remove it in case the user doesn't configure to use it after the logging
// service is initalized.
-func initLogConf(cfg *ini.File) (_ *logConf, hasConsole bool, _ error) {
+func initLogConf(cfg *ini.File, hookMode bool) (_ *logConf, hasConsole bool, _ error) {
rootPath := cfg.Section("log").Key("ROOT_PATH").MustString(filepath.Join(WorkDir(), "log"))
+ if hookMode {
+ return &logConf{
+ RootPath: ensureAbs(rootPath),
+ }, false, nil
+ }
+
modes := strings.Split(cfg.Section("log").Key("MODE").MustString("console"), ",")
lc := &logConf{
RootPath: ensureAbs(rootPath),
@@ -118,12 +125,24 @@ func initLogConf(cfg *ini.File) (_ *logConf, hasConsole bool, _ error) {
return lc, hasConsole, nil
}
-// InitLogging initializes the logging service of the application.
-func InitLogging() {
- logConf, hasConsole, err := initLogConf(File)
+// InitLogging initializes the logging service of the application. When the
+// argument "hookMode" is true, it only initializes the root path for log files
+// without creating any logger.
+func InitLogging(hookMode bool) {
+ logConf, hasConsole, err := initLogConf(File, hookMode)
if err != nil {
log.Fatal("Failed to init logging configuration: %v", err)
}
+ defer func() {
+ if !hasConsole {
+ log.Remove(log.DefaultConsoleName)
+ }
+ Log = logConf
+ }()
+
+ if hookMode {
+ return
+ }
err = os.MkdirAll(logConf.RootPath, os.ModePerm)
if err != nil {
@@ -158,10 +177,4 @@ func InitLogging() {
}
log.Trace("Log mode: %s (%s)", strings.Title(mode), strings.Title(strings.ToLower(level.String())))
}
-
- if !hasConsole {
- log.Remove(log.DefaultConsoleName)
- }
-
- Log = logConf
}
diff --git a/internal/conf/static.go b/internal/conf/static.go
index acd91fc2..351cbdd4 100644
--- a/internal/conf/static.go
+++ b/internal/conf/static.go
@@ -492,6 +492,8 @@ func handleDeprecated() {
// HookMode indicates whether program starts as Git server-side hook callback.
// All operations should be done synchronously to prevent program exits before finishing.
+//
+// ⚠️ WARNING: Should only be set by "internal/cmd/serv.go".
var HookMode bool
// Indicates which database backend is currently being used.
diff --git a/internal/route/install.go b/internal/route/install.go
index e14a60aa..e3d0555b 100644
--- a/internal/route/install.go
+++ b/internal/route/install.go
@@ -54,7 +54,7 @@ func GlobalInit(customConf string) error {
return errors.Wrap(err, "init configuration")
}
- conf.InitLogging()
+ conf.InitLogging(false)
log.Info("%s %s", conf.App.BrandName, conf.App.Version)
log.Trace("Work directory: %s", conf.WorkDir())
log.Trace("Custom path: %s", conf.CustomDir())