closed missinggo.Event
config Config
+ logger *log.Logger
halfOpenLimit int
peerID PeerID
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 {
dopplegangerAddrs: make(map[string]struct{}),
torrents: make(map[metainfo.Hash]*Torrent),
}
+ cl.initLogger()
defer func() {
if err == nil {
return
L: &cl.mu,
},
}
- t.logger = log.Default.Clone().AddValue(t)
+ t.logger = cl.logger.Clone().AddValue(t)
t.setChunkSize(defaultChunkSize)
return
}
dir, mi := testutil.GreetingTestTorrent()
defer os.RemoveAll(dir)
cl := &Client{}
+ cl.initLogger()
tor := cl.newTorrent(
mi.HashInfoBytes(),
storage.NewFileWithCompletion(tempDir(), storage.NewMapPieceCompletion()),
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)
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)
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 {
}
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)
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)
}
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
}
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))