logging.go 1.1 KB

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