client.go | 18 +++++++++++++++++- client_test.go | 3 +-- portfwd.go | 2 +- torrent.go | 3 +++ torrent_test.go | 1 + diff --git a/client.go b/client.go index 689386cd05e15fe086159d04b5a042a8376f1d11..b31e8732025194189d18725fd2f0b368b880e1a7 100644 --- a/client.go +++ b/client.go @@ -42,6 +42,7 @@ event sync.Cond closed missinggo.Event config Config + logger *log.Logger halfOpenLimit int peerID PeerID @@ -222,6 +223,20 @@ } return } +const debugLogValue = "debug" + +func (cl *Client) debugLogFilter(m *log.Msg) bool { + if !cl.config.Debug { + _, ok := m.Values()[debugLogValue] + return !ok + } + return true +} + +func (cl *Client) initLogger() { + cl.logger = log.Default.Clone().AddValue(cl).AddFilter(log.NewFilter(cl.debugLogFilter)) +} + // Creates a new client. func NewClient(cfg *Config) (cl *Client, err error) { if cfg == nil { @@ -247,6 +262,7 @@ config: *cfg, dopplegangerAddrs: make(map[string]struct{}), torrents: make(map[metainfo.Hash]*Torrent), } + cl.initLogger() defer func() { if err == nil { return @@ -1041,7 +1057,7 @@ metadataChanged: sync.Cond{ L: &cl.mu, }, } - t.logger = log.Default.Clone().AddValue(t) + t.logger = cl.logger.Clone().AddValue(t) t.setChunkSize(defaultChunkSize) return } diff --git a/client_test.go b/client_test.go index a16fdbf0fb2da332fdd0dd251c6bf387ad4fe69f..14030b5bd6066433e10d4730c30520529dc9d6ce 100644 --- a/client_test.go +++ b/client_test.go @@ -100,6 +100,7 @@ func TestTorrentInitialState(t *testing.T) { dir, mi := testutil.GreetingTestTorrent() defer os.RemoveAll(dir) cl := &Client{} + cl.initLogger() tor := cl.newTorrent( mi.HashInfoBytes(), storage.NewFileWithCompletion(tempDir(), storage.NewMapPieceCompletion()), @@ -1081,7 +1082,6 @@ cfg := TestingConfig() cfg.DisableUTP = true cfg.Seed = true cfg.DataDir = filepath.Join(cfg.DataDir, "server") - cfg.Debug = true cfg.ForceEncryption = true os.Mkdir(cfg.DataDir, 0755) server, err := NewClient(cfg) @@ -1093,7 +1093,6 @@ makeMagnet(t, server, cfg.DataDir, "test2") cfg = TestingConfig() cfg.DisableUTP = true cfg.DataDir = filepath.Join(cfg.DataDir, "client") - cfg.Debug = true cfg.ForceEncryption = true client, err := NewClient(cfg) require.NoError(t, err) diff --git a/portfwd.go b/portfwd.go index 1f1ecd58095081d016efabc2b8097c9f5019f2f1..293b69638c4e79008ce8e0ad8db5ab72ff3a0d11 100644 --- a/portfwd.go +++ b/portfwd.go @@ -30,7 +30,7 @@ } cl.mu.Unlock() ds := upnp.Discover(0, 2*time.Second) cl.mu.Lock() - flog.Default.Emit(flog.Fmsg("discovered %d upnp devices", len(ds))) + flog.Default.Handle(flog.Fmsg("discovered %d upnp devices", len(ds))) port := cl.incomingPeerPort() cl.mu.Unlock() for _, d := range ds { diff --git a/torrent.go b/torrent.go index f5d3b2a646cebe2934762a3de1518293564d6300..1eb237e8008e4538c39097068d21a79e987c5092 100644 --- a/torrent.go +++ b/torrent.go @@ -1008,6 +1008,7 @@ t.pieces[req.Index].pendChunkIndex(ci) } func (t *Torrent) pieceCompletionChanged(piece int) { + log.Call().Add("piece", piece).AddValue(debugLogValue).Log(t.logger) t.cl.event.Broadcast() if t.pieceComplete(piece) { t.onPieceCompleted(piece) @@ -1040,6 +1041,7 @@ func (t *Torrent) updatePieceCompletion(piece int) { pcu := t.pieceCompleteUncached(piece) p := &t.pieces[piece] changed := t.completedPieces.Get(piece) != pcu.Complete || p.storageCompletionOk != pcu.Ok + log.Fmsg("piece %d completion: %v", piece, pcu.Ok).AddValue(debugLogValue).Log(t.logger) p.storageCompletionOk = pcu.Ok t.completedPieces.Set(piece, pcu.Complete) // log.Printf("piece %d uncached completion: %v", piece, pcu.Complete) @@ -1470,6 +1472,7 @@ return &t.cl.mu } func (t *Torrent) pieceHashed(piece int, correct bool) { + log.Fmsg("hashed piece %d", piece).Add("piece", piece).Add("passed", correct).AddValue(debugLogValue).Log(t.logger) if t.closed.IsSet() { return } diff --git a/torrent_test.go b/torrent_test.go index c407af0b1bb8c934d40e7ff412ec81a54cb8bf1b..e50618d0af6a20097d4c02aa2edb3ddcd409fade 100644 --- a/torrent_test.go +++ b/torrent_test.go @@ -147,6 +147,7 @@ func TestPieceHashFailed(t *testing.T) { mi := testutil.GreetingMetaInfo() cl := new(Client) + cl.initLogger() tt := cl.newTorrent(mi.HashInfoBytes(), badStorage{}) tt.setChunkSize(2) require.NoError(t, tt.setInfoBytes(mi.InfoBytes))