package main import ( "os" "playback-device-server/server" "playback-device-server/users" "sync" "github.com/rs/zerolog" "github.com/rs/zerolog/log" ) func main() { initializeLogger() log.Info().Msg("starting playback device server") configuration, err := LoadConfiguration("config.json") if err != nil { log.Error().Err(err).Msg("configuration error") os.Exit(1) } userDatabase := users.UserDatabase{} userDatabase.SetDirectory(configuration.DatabaseDirectory) err = userDatabase.Initialize() if err != nil { log.Error().Err(err).Msg("failed to initialize user database") os.Exit(1) } defer userDatabase.Close() userManager := users.UserManager{} err = userManager.Initialize(&userDatabase) if err != nil { log.Error().Err(err).Msg("failed to initialize user manager") } webServer := server.WebServer{} webServer.SetWebAppDirectoryPath("www") webServer.SetPort(configuration.Port) webServer.Initialize() defer webServer.Close() var wg sync.WaitGroup wg.Add(1) go func() { defer wg.Done() log.Info().Msg("starting web server") err := webServer.Start() if err != nil { log.Error().Err(err).Msg("failed to start web server") } }() wg.Wait() } func initializeLogger() { zerolog.TimeFieldFormat = zerolog.TimeFormatUnixMs file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { log.Printf("failed to open log file: %v", err) } consoleWriter := zerolog.ConsoleWriter{Out: os.Stdout} multi := zerolog.MultiLevelWriter(consoleWriter, file) log.Logger = zerolog.New(multi).With().Timestamp().Logger() }