add debug logging flag

This commit is contained in:
Username
2026-02-24 09:25:20 +01:00
parent bbd809c73f
commit fc1aaf354b
3 changed files with 49 additions and 0 deletions

View File

@@ -2,6 +2,10 @@ package main
import (
"crypto/tls"
"fmt"
"log"
"os"
"time"
"layeh.com/barnard/uiterm"
"layeh.com/gumble/gumble"
@@ -14,6 +18,10 @@ type Barnard struct {
Address string
TLSConfig tls.Config
Debug bool
Logger *log.Logger
TreeWidth int
LogFile *os.File
Stream *gumbleopenal.Stream
@@ -24,3 +32,16 @@ type Barnard struct {
UiTree uiterm.Tree
UiInputStatus uiterm.Label
}
func (b *Barnard) debugf(format string, args ...interface{}) {
if b.Debug && b.Logger != nil {
b.Logger.Printf(format, args...)
}
}
func (b *Barnard) logMessage(line string) {
if b.LogFile != nil {
now := time.Now()
fmt.Fprintf(b.LogFile, "[%s] %s\n", now.Format("2006-01-02 15:04:05"), line)
}
}

View File

@@ -14,6 +14,7 @@ func (b *Barnard) start() {
b.Config.Attach(gumbleutil.AutoBitrate)
b.Config.Attach(b)
b.debugf("dialing %s", b.Address)
var err error
_, err = gumble.DialWithDialer(new(net.Dialer), b.Address, b.Config, &b.TLSConfig)
if err != nil {
@@ -25,6 +26,7 @@ func (b *Barnard) start() {
if os.Getenv("ALSOFT_LOGLEVEL") == "" {
os.Setenv("ALSOFT_LOGLEVEL", "0")
}
b.debugf("initializing audio stream")
if stream, err := gumbleopenal.New(b.Client); err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err)
os.Exit(1)
@@ -35,6 +37,7 @@ func (b *Barnard) start() {
func (b *Barnard) OnConnect(e *gumble.ConnectEvent) {
b.Client = e.Client
b.debugf("connected to %s", b.Client.Conn.RemoteAddr())
b.Ui.SetActive(uiViewInput)
b.UiTree.Rebuild()
@@ -48,6 +51,7 @@ func (b *Barnard) OnConnect(e *gumble.ConnectEvent) {
}
func (b *Barnard) OnDisconnect(e *gumble.DisconnectEvent) {
b.debugf("disconnected (type=%d)", e.Type)
var reason string
switch e.Type {
case gumble.DisconnectError:
@@ -63,10 +67,14 @@ func (b *Barnard) OnDisconnect(e *gumble.DisconnectEvent) {
}
func (b *Barnard) OnTextMessage(e *gumble.TextMessageEvent) {
if e.Sender != nil {
b.debugf("message from %s (%d bytes)", e.Sender.Name, len(e.Message))
}
b.AddOutputMessage(e.Sender, e.Message)
}
func (b *Barnard) OnUserChange(e *gumble.UserChangeEvent) {
b.debugf("user change: %s (type=%d)", e.User.Name, e.Type)
if e.Type.Has(gumble.UserChangeChannel) && e.User == b.Client.Self {
b.UpdateInputStatus(fmt.Sprintf("To: %s", e.User.Channel.Name))
}
@@ -80,6 +88,7 @@ func (b *Barnard) OnChannelChange(e *gumble.ChannelChangeEvent) {
}
func (b *Barnard) OnPermissionDenied(e *gumble.PermissionDeniedEvent) {
b.debugf("permission denied (type=%d)", e.Type)
var info string
switch e.Type {
case gumble.PermissionDeniedOther:

19
main.go
View File

@@ -4,6 +4,7 @@ import (
"crypto/tls"
"flag"
"fmt"
"log"
"net"
"os"
@@ -23,6 +24,9 @@ func main() {
passwordPrompt := flag.Bool("password-prompt", false, "prompt for server password on stdin")
insecure := flag.Bool("insecure", false, "skip server certificate verification")
certificate := flag.String("certificate", "", "PEM encoded certificate and private key")
debug := flag.Bool("debug", false, "enable debug logging to stderr")
treeWidth := flag.Int("tree-width", 20, "width of the channel tree pane")
logFile := flag.String("log", "", "write chat messages to file")
flag.Parse()
@@ -56,6 +60,21 @@ func main() {
b.Config.Username = *username
b.Config.Password = pass
b.TreeWidth = *treeWidth
b.Debug = *debug
if b.Debug {
b.Logger = log.New(os.Stderr, "barnard: ", log.Ltime)
b.debugf("connecting to %s as %q", addr, *username)
}
if *logFile != "" {
f, err := os.OpenFile(*logFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0600)
if err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err)
os.Exit(1)
}
defer f.Close()
b.LogFile = f
}
if *insecure {
b.TLSConfig.InsecureSkipVerify = true