Add logging.Init() to all cmd programs
- anvilwebgw: init logging in startCmd - anvilweb: init logging in main - anvillm: init logging in main - Assist: init logging in main Each program now creates its own timestamped log file
This commit is contained in:
parent
521f785313
commit
0b612aa0cc
|
|
@ -2,6 +2,7 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"anvillm/internal/logging"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"fmt"
|
||||
|
|
@ -19,6 +20,7 @@ import (
|
|||
"9fans.net/go/acme"
|
||||
"9fans.net/go/plan9"
|
||||
"9fans.net/go/plan9/client"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
const windowName = "/AnviLLM/"
|
||||
|
|
@ -68,6 +70,11 @@ var (
|
|||
)
|
||||
|
||||
func main() {
|
||||
if err := logging.Init(); err != nil {
|
||||
log.Fatalf("Failed to initialize logging: %v", err)
|
||||
}
|
||||
defer logging.Logger().Sync()
|
||||
|
||||
flag.Parse()
|
||||
|
||||
// Connect to anvilsrv via 9P, auto-starting if needed
|
||||
|
|
@ -75,11 +82,11 @@ func main() {
|
|||
fs, err = connectToServer()
|
||||
if err != nil {
|
||||
// Try to start anvilsrv automatically
|
||||
log.Printf("anvilsrv not running, attempting to start...")
|
||||
logging.Logger().Info("anvilsrv not running, attempting to start")
|
||||
startCmd := exec.Command("anvilsrv", "start")
|
||||
if err := startCmd.Run(); err != nil {
|
||||
log.Printf("ERROR: Failed to start anvilsrv: %v", err)
|
||||
log.Printf("Continuing without daemon connection. Use 'Daemon' command to manage server.")
|
||||
logging.Logger().Error("failed to start anvilsrv", zap.Error(err))
|
||||
logging.Logger().Info("continuing without daemon connection")
|
||||
} else {
|
||||
// Wait a moment for daemon to initialize
|
||||
for i := 0; i < 20; i++ {
|
||||
|
|
@ -91,8 +98,8 @@ func main() {
|
|||
}
|
||||
|
||||
if err != nil {
|
||||
log.Printf("ERROR: Failed to connect to anvilsrv after starting: %v", err)
|
||||
log.Printf("Continuing without daemon connection. Use 'Daemon' command to manage server.")
|
||||
logging.Logger().Error("failed to connect to anvilsrv after starting", zap.Error(err))
|
||||
logging.Logger().Info("continuing without daemon connection")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -102,7 +109,7 @@ func main() {
|
|||
|
||||
w, err := acme.New()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
logging.Logger().Fatal("failed to create acme window", zap.Error(err))
|
||||
}
|
||||
defer w.CloseFiles()
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"anvillm/internal/logging"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
|
|
@ -16,6 +17,7 @@ import (
|
|||
"9fans.net/go/plan9/client"
|
||||
"github.com/gdamore/tcell/v2"
|
||||
"github.com/rivo/tview"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
var (
|
||||
|
|
@ -41,11 +43,16 @@ type SessionInfo struct {
|
|||
}
|
||||
|
||||
func main() {
|
||||
if err := logging.Init(); err != nil {
|
||||
log.Fatalf("Failed to initialize logging: %v", err)
|
||||
}
|
||||
defer logging.Logger().Sync()
|
||||
|
||||
// Connect to anvilsrv
|
||||
var err error
|
||||
fs, err = connectToServer()
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to connect to anvilsrv: %v\nRun 'anvilsrv start' first", err)
|
||||
logging.Logger().Fatal("failed to connect to anvilsrv", zap.Error(err))
|
||||
}
|
||||
defer fs.Close()
|
||||
|
||||
|
|
@ -60,7 +67,7 @@ func main() {
|
|||
|
||||
// Run application
|
||||
if err := app.SetRoot(pages, true).EnableMouse(true).Run(); err != nil {
|
||||
log.Fatal(err)
|
||||
logging.Logger().Fatal("application error", zap.Error(err))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,15 +6,16 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"anvillm/internal/logging"
|
||||
"embed"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"log"
|
||||
"net/http"
|
||||
"net/http/httputil"
|
||||
"net/url"
|
||||
"os"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
//go:embed static/*
|
||||
|
|
@ -26,17 +27,21 @@ var (
|
|||
)
|
||||
|
||||
func main() {
|
||||
if err := logging.Init(); err != nil {
|
||||
log.Fatalf("Failed to initialize logging: %v", err)
|
||||
}
|
||||
defer logging.Logger().Sync()
|
||||
|
||||
flag.Parse()
|
||||
|
||||
gwURL, err := url.Parse(*gwAddr)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Invalid gateway URL %q: %v\n", *gwAddr, err)
|
||||
os.Exit(1)
|
||||
logging.Logger().Fatal("invalid gateway URL", zap.String("url", *gwAddr), zap.Error(err))
|
||||
}
|
||||
|
||||
staticFS, err := fs.Sub(static, "static")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
logging.Logger().Fatal("failed to load static files", zap.Error(err))
|
||||
}
|
||||
|
||||
// Reverse proxy for /api/* to anvilwebgw
|
||||
|
|
@ -46,7 +51,8 @@ func main() {
|
|||
mux.Handle("/api/", proxy)
|
||||
mux.Handle("/", http.FileServer(http.FS(staticFS)))
|
||||
|
||||
log.Printf("Starting anvilweb on %s", *addr)
|
||||
log.Printf("Proxying /api/* to %s", *gwAddr)
|
||||
log.Fatal(http.ListenAndServe(*addr, mux))
|
||||
logging.Logger().Info("starting anvilweb", zap.String("addr", *addr), zap.String("gateway", *gwAddr))
|
||||
if err := http.ListenAndServe(*addr, mux); err != nil {
|
||||
logging.Logger().Fatal("server error", zap.Error(err))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"anvillm/internal/logging"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"fmt"
|
||||
|
|
@ -22,6 +23,7 @@ import (
|
|||
|
||||
"9fans.net/go/plan9"
|
||||
"9fans.net/go/plan9/client"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
const terminalCommand = "foot"
|
||||
|
|
@ -77,12 +79,17 @@ func usage() {
|
|||
}
|
||||
|
||||
func startCmd(daemonize bool) {
|
||||
if err := logging.Init(); err != nil {
|
||||
log.Fatalf("Failed to initialize logging: %v", err)
|
||||
}
|
||||
defer logging.Logger().Sync()
|
||||
|
||||
pidFile := getPidFilePath()
|
||||
|
||||
// Check if already running before daemonizing
|
||||
if existingPid := readPidFile(); existingPid != 0 {
|
||||
if isProcessRunning(existingPid) {
|
||||
log.Fatalf("anvilwebgw already running (PID %d)", existingPid)
|
||||
logging.Logger().Fatal("anvilwebgw already running", zap.Int("pid", existingPid))
|
||||
}
|
||||
// Stale PID file
|
||||
os.Remove(pidFile)
|
||||
|
|
@ -93,7 +100,7 @@ func startCmd(daemonize bool) {
|
|||
if os.Getenv("ANVILWEBGW_DAEMON") != "1" {
|
||||
cmd, err := os.Executable()
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to get executable path: %v", err)
|
||||
logging.Logger().Fatal("failed to get executable path", zap.Error(err))
|
||||
}
|
||||
// Reconstruct args: flags + fgstart
|
||||
fwdArgs := []string{"fgstart"}
|
||||
|
|
@ -180,16 +187,14 @@ func startCmd(daemonize bool) {
|
|||
|
||||
go func() {
|
||||
sig := <-sigChan
|
||||
log.Printf("Received signal %v, shutting down", sig)
|
||||
logging.Logger().Info("received signal, shutting down", zap.String("signal", sig.String()))
|
||||
server.Close()
|
||||
}()
|
||||
|
||||
log.Printf("anvilwebgw started successfully")
|
||||
log.Printf("HTTP gateway listening on %s", *addr)
|
||||
log.Printf("Using 9P namespace: %s", *namespace)
|
||||
logging.Logger().Info("anvilwebgw started successfully", zap.String("addr", *addr), zap.String("namespace", *namespace))
|
||||
|
||||
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
||||
log.Fatal(err)
|
||||
logging.Logger().Fatal("server error", zap.Error(err))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Reference in New Issue