diff --git a/.gitignore b/.gitignore index 459afc7..6029a75 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ users.db -start \ No newline at end of file +start +*.log \ No newline at end of file diff --git a/go.mod b/go.mod index d981de2..b0ec7af 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,10 @@ go 1.24.1 require ( github.com/google/uuid v1.6.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/mattn/go-sqlite3 v1.14.24 // indirect + github.com/rs/zerolog v1.33.0 // indirect golang.org/x/crypto v0.36.0 // indirect + golang.org/x/sys v0.31.0 // indirect ) diff --git a/go.sum b/go.sum index c5d5573..f6a0b8d 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,22 @@ +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM= github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= +github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= diff --git a/main/main.go b/main/main.go index a22af19..263ced6 100644 --- a/main/main.go +++ b/main/main.go @@ -1,19 +1,24 @@ package main import ( - "fmt" "os" "playback-device-server/users" + + "github.com/rs/zerolog" + "github.com/rs/zerolog/log" ) const USER_DATABASE_DIR = "." func main() { + initializeLogger() + log.Info().Msg("starting playback device server") + userDatabase := users.UserDatabase{} userDatabase.SetDirectory(USER_DATABASE_DIR) err := userDatabase.Initialize() if err != nil { - fmt.Println(err.Error()) + log.Error().Err(err).Msg("failed to initialize user database") os.Exit(1) } defer userDatabase.Close() @@ -21,6 +26,19 @@ func main() { userManager := users.UserManager{} err = userManager.Initialize(&userDatabase) if err != nil { - fmt.Println("failed to initialize user manager") + log.Error().Err(err).Msg("failed to initialize user manager") } } + +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() +} diff --git a/users/user_manager.go b/users/user_manager.go index 9ee7df0..735d42f 100644 --- a/users/user_manager.go +++ b/users/user_manager.go @@ -5,6 +5,8 @@ import ( "encoding/base64" "fmt" "time" + + "github.com/rs/zerolog/log" ) const DEFAULT_USERNAME = "admin" @@ -28,11 +30,7 @@ func (um *UserManager) Initialize(userDatabase *UserDatabase) error { return error } - fmt.Println() - fmt.Println("Creating default admin user:") - fmt.Printf("Username: %s\n", DEFAULT_USERNAME) - fmt.Printf("Password: %s\n", password) - fmt.Println() + log.Info().Str("username", DEFAULT_USERNAME).Str("password", password).Msg("creating default admin user") user := User{Username: DEFAULT_USERNAME, Password: password, IsAdmin: true} _, error = um.CreateUser(&user)