f56aa20014
This moves all the env var reading into one central module and logs the loaded config once at startup which should help in troubleshooting user server logs
48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
package lifecycle
|
|
|
|
import (
|
|
"fmt"
|
|
"log/slog"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/ollama/ollama/server/envconfig"
|
|
)
|
|
|
|
func InitLogging() {
|
|
level := slog.LevelInfo
|
|
|
|
if envconfig.Debug {
|
|
level = slog.LevelDebug
|
|
}
|
|
|
|
var logFile *os.File
|
|
var err error
|
|
// Detect if we're a GUI app on windows, and if not, send logs to console
|
|
if os.Stderr.Fd() != 0 {
|
|
// Console app detected
|
|
logFile = os.Stderr
|
|
// TODO - write one-line to the app.log file saying we're running in console mode to help avoid confusion
|
|
} else {
|
|
logFile, err = os.OpenFile(AppLogFile, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0755)
|
|
if err != nil {
|
|
slog.Error(fmt.Sprintf("failed to create server log %v", err))
|
|
return
|
|
}
|
|
}
|
|
handler := slog.NewTextHandler(logFile, &slog.HandlerOptions{
|
|
Level: level,
|
|
AddSource: true,
|
|
ReplaceAttr: func(_ []string, attr slog.Attr) slog.Attr {
|
|
if attr.Key == slog.SourceKey {
|
|
source := attr.Value.Any().(*slog.Source)
|
|
source.File = filepath.Base(source.File)
|
|
}
|
|
return attr
|
|
},
|
|
})
|
|
|
|
slog.SetDefault(slog.New(handler))
|
|
|
|
slog.Info("ollama app started")
|
|
}
|