summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2018-01-31 21:18:21 -0500
committerDrew DeVault <sir@cmpwn.com>2018-01-31 21:18:21 -0500
commita21afdaa6bab8f6d05bbe9272700eef571548a59 (patch)
tree82149576ffdb6c13bf1a1ac2f1abb729e79cf3c9
parent1710c9054898e820700d673e21e7c7a90a3f67b1 (diff)
downloadaerc-a21afdaa6bab8f6d05bbe9272700eef571548a59.tar.gz
Improve logging
-rw-r--r--.gitignore1
-rw-r--r--cmd/aerc/main.go23
-rw-r--r--ui/account.go31
-rw-r--r--worker/imap/worker.go28
-rw-r--r--worker/worker.go5
5 files changed, 68 insertions, 20 deletions
diff --git a/.gitignore b/.gitignore
index f1683ec..144e4e5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 .go
 /aerc
+log
diff --git a/cmd/aerc/main.go b/cmd/aerc/main.go
index e33f158..cda4991 100644
--- a/cmd/aerc/main.go
+++ b/cmd/aerc/main.go
@@ -1,13 +1,30 @@
 package main
 
 import (
+	"fmt"
+	"io"
+	"io/ioutil"
+	"log"
+	"os"
 	"time"
 
+	"github.com/mattn/go-isatty"
+
 	"git.sr.ht/~sircmpwn/aerc2/config"
 	"git.sr.ht/~sircmpwn/aerc2/ui"
 )
 
 func main() {
+	var logOut io.Writer
+	var logger *log.Logger
+	if !isatty.IsTerminal(os.Stdout.Fd()) {
+		logOut = os.Stdout
+	} else {
+		logOut = ioutil.Discard
+	}
+	logger = log.New(logOut, "", log.LstdFlags|log.Lshortfile)
+	logger.Println("Starting up aerc")
+
 	conf, err := config.LoadConfig(nil)
 	if err != nil {
 		panic(err)
@@ -18,7 +35,11 @@ func main() {
 	}
 	defer _ui.Close()
 	for _, account := range conf.Accounts {
-		tab, err := ui.NewAccountTab(&account)
+		logger.Printf("Initializing account %s\n", account.Name)
+		tab, err := ui.NewAccountTab(&account, log.New(
+			logOut,
+			fmt.Sprintf("[%s] ", account.Name),
+			log.LstdFlags|log.Lshortfile))
 		if err != nil {
 			panic(err)
 		}
diff --git a/ui/account.go b/ui/account.go
index 8353db3..59544d4 100644
--- a/ui/account.go
+++ b/ui/account.go
@@ -1,26 +1,29 @@
 package ui
 
 import (
-	"fmt"
+	"log"
 
 	tb "github.com/nsf/termbox-go"
 
+	"github.com/davecgh/go-spew/spew"
+
 	"git.sr.ht/~sircmpwn/aerc2/config"
 	"git.sr.ht/~sircmpwn/aerc2/worker"
 	"git.sr.ht/~sircmpwn/aerc2/worker/types"
 )
 
 type AccountTab struct {
-	Config *config.AccountConfig
-	Worker worker.Worker
-	Parent *UIState
-
+	Config  *config.AccountConfig
+	Worker  worker.Worker
+	Parent  *UIState
+	logger  *log.Logger
 	counter int
-	log     []string
 }
 
-func NewAccountTab(conf *config.AccountConfig) (*AccountTab, error) {
-	work, err := worker.NewWorker(conf.Source)
+func NewAccountTab(conf *config.AccountConfig,
+	logger *log.Logger) (*AccountTab, error) {
+
+	work, err := worker.NewWorker(conf.Source, logger)
 	if err != nil {
 		return nil, err
 	}
@@ -30,6 +33,7 @@ func NewAccountTab(conf *config.AccountConfig) (*AccountTab, error) {
 	return &AccountTab{
 		Config: conf,
 		Worker: work,
+		logger: logger,
 	}, nil
 }
 
@@ -49,9 +53,6 @@ func (acc *AccountTab) Render(at Geometry) {
 	}
 	TFill(at, cell)
 	TPrintf(&at, cell, "%s %d\n", acc.Name(), acc.counter)
-	for _, str := range acc.log {
-		TPrintf(&at, cell, "%s\n", str)
-	}
 	acc.counter++
 	if acc.counter%10000 == 0 {
 		acc.counter = 0
@@ -64,5 +65,11 @@ func (acc *AccountTab) GetChannel() chan types.WorkerMessage {
 }
 
 func (acc *AccountTab) HandleMessage(msg types.WorkerMessage) {
-	acc.log = append(acc.log, fmt.Sprintf("<- %T", msg))
+	switch msg.InResponseTo().(type) {
+	case types.Configure:
+		// Avoid printing passwords
+		acc.logger.Printf("<- %T\n", msg)
+	default:
+		acc.logger.Printf("<- %s", spew.Sdump(msg))
+	}
 }
diff --git a/worker/imap/worker.go b/worker/imap/worker.go
index 6971f8c..d3ef715 100644
--- a/worker/imap/worker.go
+++ b/worker/imap/worker.go
@@ -2,13 +2,16 @@ package imap
 
 import (
 	"fmt"
+	"log"
 	"net/url"
 	"strings"
 
-	"git.sr.ht/~sircmpwn/aerc2/worker/types"
+	"github.com/davecgh/go-spew/spew"
 	"github.com/emersion/go-imap"
-	"github.com/emersion/go-imap/client"
 	"github.com/emersion/go-imap-idle"
+	"github.com/emersion/go-imap/client"
+
+	"git.sr.ht/~sircmpwn/aerc2/worker/types"
 )
 
 var errUnsupported = fmt.Errorf("unsupported command")
@@ -31,13 +34,15 @@ type IMAPWorker struct {
 
 	client  *imapClient
 	updates chan client.Update
+	logger  *log.Logger
 }
 
-func NewIMAPWorker() *IMAPWorker {
+func NewIMAPWorker(logger *log.Logger) *IMAPWorker {
 	return &IMAPWorker{
 		messages: make(chan types.WorkerMessage, 50),
 		actions:  make(chan types.WorkerMessage, 50),
 		updates:  make(chan client.Update, 50),
+		logger:   logger,
 	}
 }
 
@@ -126,11 +131,24 @@ func (w *IMAPWorker) handleMessage(msg types.WorkerMessage) error {
 	return nil
 }
 
+// Logs an action but censors passwords
+func (w *IMAPWorker) logAction(msg types.WorkerMessage) {
+	switch msg := msg.(type) {
+	case types.Configure:
+		src := msg.Config.Source
+		msg.Config.Source = "[obsfucated]"
+		w.logger.Printf("<= %s", spew.Sdump(msg))
+		msg.Config.Source = src
+	default:
+		w.logger.Printf("<= %s", spew.Sdump(msg))
+	}
+}
+
 func (w *IMAPWorker) Run() {
 	for {
 		select {
 		case msg := <-w.actions:
-			fmt.Printf("<= %T\n", msg)
+			w.logAction(msg)
 			if err := w.handleMessage(msg); err == errUnsupported {
 				w.messages <- types.Unsupported{
 					Message: types.RespondTo(msg),
@@ -146,7 +164,7 @@ func (w *IMAPWorker) Run() {
 				}
 			}
 		case update := <-w.updates:
-			fmt.Printf("<= %T\n", update)
+			w.logger.Printf("[= %s", spew.Sdump(update))
 		}
 	}
 }
diff --git a/worker/worker.go b/worker/worker.go
index c8ec622..b665884 100644
--- a/worker/worker.go
+++ b/worker/worker.go
@@ -5,6 +5,7 @@ import (
 	"git.sr.ht/~sircmpwn/aerc2/worker/types"
 
 	"fmt"
+	"log"
 	"net/url"
 )
 
@@ -15,7 +16,7 @@ type Worker interface {
 }
 
 // Guesses the appropriate worker type based on the given source string
-func NewWorker(source string) (Worker, error) {
+func NewWorker(source string, logger *log.Logger) (Worker, error) {
 	u, err := url.Parse(source)
 	if err != nil {
 		return nil, err
@@ -23,7 +24,7 @@ func NewWorker(source string) (Worker, error) {
 	switch u.Scheme {
 	case "imap":
 	case "imaps":
-		return imap.NewIMAPWorker(), nil
+		return imap.NewIMAPWorker(logger), nil
 	}
 	return nil, fmt.Errorf("Unknown backend %s", u.Scheme)
 }