various: pass logger.Logf through to more places

Updates #7537

Signed-off-by: Andrew Dunham <andrew@du.nham.ca>
Change-Id: Id89acab70ea678c8c7ff0f44792d54c7223337c6
This commit is contained in:
Andrew Dunham 2023-03-12 10:58:11 -04:00
parent 958c89470b
commit 83fa17d26c
5 changed files with 31 additions and 4 deletions

View File

@ -212,6 +212,7 @@ func NewDirect(opts Options) (*Direct, error) {
Forward: dnscache.Get().Forward, // use default cache's forwarder
UseLastGood: true,
LookupIPFallback: dnsfallback.Lookup,
Logf: opts.Logf,
}
tr := http.DefaultTransport.(*http.Transport).Clone()
tr.Proxy = tshttpproxy.ProxyFromEnvironment

View File

@ -388,12 +388,14 @@ func (a *Dialer) tryURLUpgrade(ctx context.Context, u *url.URL, addr netip.Addr,
dns = &dnscache.Resolver{
SingleHostStaticResult: []netip.Addr{addr},
SingleHost: u.Hostname(),
Logf: a.Logf, // not a.logf method; we want to propagate nil-ness
}
} else {
dns = &dnscache.Resolver{
Forward: dnscache.Get().Forward,
LookupIPFallback: dnsfallback.Lookup,
UseLastGood: true,
Logf: a.Logf, // not a.logf method; we want to propagate nil-ness
}
}

View File

@ -384,6 +384,7 @@ func (f *forwarder) getKnownDoHClientForProvider(urlBase string) (c *http.Client
dialer := dnscache.Dialer(nsDialer.DialContext, &dnscache.Resolver{
SingleHost: dohURL.Hostname(),
SingleHostStaticResult: allIPs,
Logf: f.logf,
})
c = &http.Client{
Transport: &http.Transport{

View File

@ -250,10 +250,13 @@ func SetCachePath(path string) {
// logfunc stores the logging function to use for this package.
var logfunc syncs.AtomicValue[logger.Logf]
// SetLogger sets the logging function that this package will use. The default
// logger if this function is not called is 'log.Printf'.
func SetLogger(log logger.Logf) {
logfunc.Store(log)
// SetLogger sets the logging function that this package will use, and returns
// the old value (which may be nil).
//
// If this function is never called, or if this function is called with a nil
// value, 'log.Printf' will be used to print logs.
func SetLogger(log logger.Logf) (old logger.Logf) {
return logfunc.Swap(log)
}
func logf(format string, args ...any) {

View File

@ -40,6 +40,7 @@ import (
"tailscale.com/logpolicy"
"tailscale.com/logtail"
"tailscale.com/logtail/filch"
"tailscale.com/net/dnsfallback"
"tailscale.com/net/memnet"
"tailscale.com/net/proxymux"
"tailscale.com/net/socks5"
@ -619,6 +620,25 @@ func (s *Server) logf(format string, a ...interface{}) {
log.Printf(format, a...)
}
// ReplaceGlobalLoggers will replace any Tailscale-specific package-global
// loggers with this Server's logger. It returns a function that, when called,
// will undo any changes made.
//
// Note that calling this function from multiple Servers will result in the
// last call taking all logs; logs are not duplicated.
func (s *Server) ReplaceGlobalLoggers() (undo func()) {
var undos []func()
oldDnsFallback := dnsfallback.SetLogger(s.logf)
undos = append(undos, func() { dnsfallback.SetLogger(oldDnsFallback) })
return func() {
for _, fn := range undos {
fn()
}
}
}
// printAuthURLLoop loops once every few seconds while the server is still running and
// is in NeedsLogin state, printing out the auth URL.
func (s *Server) printAuthURLLoop() {