logging.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package lifecycle
  2. import (
  3. "fmt"
  4. "log/slog"
  5. "os"
  6. "path/filepath"
  7. "github.com/ollama/ollama/envconfig"
  8. )
  9. func InitLogging() {
  10. level := slog.LevelInfo
  11. if envconfig.Debug {
  12. level = slog.LevelDebug
  13. }
  14. var logFile *os.File
  15. var err error
  16. // Detect if we're a GUI app on windows, and if not, send logs to console
  17. if os.Stderr.Fd() != 0 {
  18. // Console app detected
  19. logFile = os.Stderr
  20. // TODO - write one-line to the app.log file saying we're running in console mode to help avoid confusion
  21. } else {
  22. logFile, err = os.OpenFile(AppLogFile, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0755)
  23. if err != nil {
  24. slog.Error(fmt.Sprintf("failed to create server log %v", err))
  25. return
  26. }
  27. }
  28. handler := slog.NewTextHandler(logFile, &slog.HandlerOptions{
  29. Level: level,
  30. AddSource: true,
  31. ReplaceAttr: func(_ []string, attr slog.Attr) slog.Attr {
  32. if attr.Key == slog.SourceKey {
  33. source := attr.Value.Any().(*slog.Source)
  34. source.File = filepath.Base(source.File)
  35. }
  36. return attr
  37. },
  38. })
  39. slog.SetDefault(slog.New(handler))
  40. slog.Info("ollama app started")
  41. }