@@ -18,13 +18,49 @@ import (
1818// ConfigureLogger - gitlab-sshd's log output can be configured to text as per the documentation:
1919// https://docs.gitlab.com/omnibus/settings/logs/#json-logging
2020// This is currently controlled by the GITLAB_LOG_FORMAT environment variable.
21- func ConfigureLogger () * slog.Logger {
21+ func ConfigureLogger (cfg * config.Config ) * slog.Logger {
22+ logConfig := & v2log.Config {
23+ LogLevel : parseLogLevel (cfg .LogLevel ),
24+ }
25+ logFile , err := os .OpenFile (cfg .LogFile , os .O_APPEND | os .O_WRONLY , 0600 )
26+ if err != nil {
27+ syslogError (err )
28+ logConfig .Writer = os .Stderr
29+ } else {
30+ logConfig .Writer = logFile
31+ }
32+
2233 if gitlabLogFormat := os .Getenv ("GITLAB_LOG_FORMAT" ); gitlabLogFormat == "text" {
23- return v2log .NewWithConfig (& v2log.Config {
24- UseTextFormat : true ,
25- })
34+ logConfig .UseTextFormat = true
35+ }
36+ return v2log .NewWithConfig (logConfig )
37+ }
38+
39+ func parseLogLevel (level string ) slog.Level {
40+ switch level {
41+ case "DEBUG" , "debug" :
42+ return slog .LevelDebug
43+ case "INFO" , "info" :
44+ return slog .LevelInfo
45+ case "WARN" , "warn" :
46+ return slog .LevelWarn
47+ case "ERROR" , "error" :
48+ return slog .LevelError
49+ default :
50+ return slog .LevelInfo
51+ }
52+ }
53+
54+ func syslogError (err error ) {
55+ syslogLogger , syslogLoggerErr := syslog .NewLogger (syslog .LOG_ERR | syslog .LOG_USER , 0 )
56+ progName , _ := os .Executable ()
57+ if syslogLoggerErr == nil {
58+ msg := fmt .Sprintf ("%s: Unable to configure logging: %v\n " , progName , err .Error ())
59+ syslogLogger .Print (msg )
60+ } else {
61+ msg := fmt .Sprintf ("%s: Unable to configure logging: %v, %v\n " , progName , err .Error (), syslogLoggerErr .Error ())
62+ fmt .Fprintln (os .Stderr , msg )
2663 }
27- return v2log .New ()
2864}
2965
3066func logFmt (inFmt string ) string {
@@ -74,15 +110,7 @@ func Configure(cfg *config.Config) io.Closer {
74110 }
75111
76112 if err != nil {
77- progName , _ := os .Executable ()
78- syslogLogger , syslogLoggerErr := syslog .NewLogger (syslog .LOG_ERR | syslog .LOG_USER , 0 )
79- if syslogLoggerErr == nil {
80- msg := fmt .Sprintf ("%s: Unable to configure logging: %v\n " , progName , err .Error ())
81- syslogLogger .Print (msg )
82- } else {
83- msg := fmt .Sprintf ("%s: Unable to configure logging: %v, %v\n " , progName , err .Error (), syslogLoggerErr .Error ())
84- fmt .Fprintln (os .Stderr , msg )
85- }
113+ syslogError (err )
86114
87115 cfg .LogFile = "/dev/null"
88116 closer , err = log .Initialize (buildOpts (cfg )... )
0 commit comments