mirror of
https://github.com/tailscale/tailscale.git
synced 2025-02-22 12:58:37 +00:00
control/controlclient: reset logid when you log in with a new account
Signed-off-by: Christine Dodrill <xe@tailscale.com>
This commit is contained in:
parent
14dc790137
commit
80b159437a
@ -36,7 +36,7 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
W 💣 golang.zx2c4.com/wireguard/windows/tunnel/winipcfg from tailscale.com/net/interfaces+
|
W 💣 golang.zx2c4.com/wireguard/windows/tunnel/winipcfg from tailscale.com/net/interfaces+
|
||||||
💣 gvisor.dev/gvisor/pkg/gohacks from gvisor.dev/gvisor/pkg/state/wire
|
💣 gvisor.dev/gvisor/pkg/gohacks from gvisor.dev/gvisor/pkg/state/wire
|
||||||
gvisor.dev/gvisor/pkg/linewriter from gvisor.dev/gvisor/pkg/log
|
gvisor.dev/gvisor/pkg/linewriter from gvisor.dev/gvisor/pkg/log
|
||||||
gvisor.dev/gvisor/pkg/log from gvisor.dev/gvisor/pkg/tcpip/stack+
|
gvisor.dev/gvisor/pkg/log from gvisor.dev/gvisor/pkg/state+
|
||||||
gvisor.dev/gvisor/pkg/rand from gvisor.dev/gvisor/pkg/tcpip/network/hash+
|
gvisor.dev/gvisor/pkg/rand from gvisor.dev/gvisor/pkg/tcpip/network/hash+
|
||||||
💣 gvisor.dev/gvisor/pkg/sleep from gvisor.dev/gvisor/pkg/tcpip/transport/tcp
|
💣 gvisor.dev/gvisor/pkg/sleep from gvisor.dev/gvisor/pkg/tcpip/transport/tcp
|
||||||
💣 gvisor.dev/gvisor/pkg/state from gvisor.dev/gvisor/pkg/tcpip+
|
💣 gvisor.dev/gvisor/pkg/state from gvisor.dev/gvisor/pkg/tcpip+
|
||||||
@ -46,7 +46,7 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
gvisor.dev/gvisor/pkg/tcpip/adapters/gonet from tailscale.com/wgengine/netstack
|
gvisor.dev/gvisor/pkg/tcpip/adapters/gonet from tailscale.com/wgengine/netstack
|
||||||
gvisor.dev/gvisor/pkg/tcpip/buffer from gvisor.dev/gvisor/pkg/tcpip/adapters/gonet+
|
gvisor.dev/gvisor/pkg/tcpip/buffer from gvisor.dev/gvisor/pkg/tcpip/adapters/gonet+
|
||||||
gvisor.dev/gvisor/pkg/tcpip/hash/jenkins from gvisor.dev/gvisor/pkg/tcpip/stack+
|
gvisor.dev/gvisor/pkg/tcpip/hash/jenkins from gvisor.dev/gvisor/pkg/tcpip/stack+
|
||||||
gvisor.dev/gvisor/pkg/tcpip/header from gvisor.dev/gvisor/pkg/tcpip/link/channel+
|
gvisor.dev/gvisor/pkg/tcpip/header from gvisor.dev/gvisor/pkg/tcpip/header/parse+
|
||||||
gvisor.dev/gvisor/pkg/tcpip/header/parse from gvisor.dev/gvisor/pkg/tcpip/network/ipv4+
|
gvisor.dev/gvisor/pkg/tcpip/header/parse from gvisor.dev/gvisor/pkg/tcpip/network/ipv4+
|
||||||
gvisor.dev/gvisor/pkg/tcpip/link/channel from tailscale.com/wgengine/netstack
|
gvisor.dev/gvisor/pkg/tcpip/link/channel from tailscale.com/wgengine/netstack
|
||||||
gvisor.dev/gvisor/pkg/tcpip/network/fragmentation from gvisor.dev/gvisor/pkg/tcpip/network/ipv4+
|
gvisor.dev/gvisor/pkg/tcpip/network/fragmentation from gvisor.dev/gvisor/pkg/tcpip/network/ipv4+
|
||||||
@ -70,12 +70,12 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
tailscale.com/atomicfile from tailscale.com/ipn+
|
tailscale.com/atomicfile from tailscale.com/ipn+
|
||||||
tailscale.com/control/controlclient from tailscale.com/ipn/ipnlocal+
|
tailscale.com/control/controlclient from tailscale.com/ipn/ipnlocal+
|
||||||
tailscale.com/derp from tailscale.com/derp/derphttp+
|
tailscale.com/derp from tailscale.com/derp/derphttp+
|
||||||
tailscale.com/derp/derphttp from tailscale.com/net/netcheck+
|
tailscale.com/derp/derphttp from tailscale.com/cmd/tailscaled+
|
||||||
tailscale.com/derp/derpmap from tailscale.com/cmd/tailscaled
|
tailscale.com/derp/derpmap from tailscale.com/cmd/tailscaled
|
||||||
tailscale.com/disco from tailscale.com/derp+
|
tailscale.com/disco from tailscale.com/derp+
|
||||||
tailscale.com/health from tailscale.com/control/controlclient+
|
tailscale.com/health from tailscale.com/control/controlclient+
|
||||||
tailscale.com/internal/deepprint from tailscale.com/ipn/ipnlocal+
|
tailscale.com/internal/deepprint from tailscale.com/ipn/ipnlocal+
|
||||||
tailscale.com/ipn from tailscale.com/ipn/ipnserver+
|
tailscale.com/ipn from tailscale.com/ipn/ipnlocal+
|
||||||
tailscale.com/ipn/ipnlocal from tailscale.com/ipn/ipnserver+
|
tailscale.com/ipn/ipnlocal from tailscale.com/ipn/ipnserver+
|
||||||
tailscale.com/ipn/ipnserver from tailscale.com/cmd/tailscaled
|
tailscale.com/ipn/ipnserver from tailscale.com/cmd/tailscaled
|
||||||
tailscale.com/ipn/ipnstate from tailscale.com/ipn+
|
tailscale.com/ipn/ipnstate from tailscale.com/ipn+
|
||||||
@ -83,13 +83,13 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
tailscale.com/ipn/policy from tailscale.com/ipn/ipnlocal
|
tailscale.com/ipn/policy from tailscale.com/ipn/ipnlocal
|
||||||
tailscale.com/log/filelogger from tailscale.com/ipn/ipnserver
|
tailscale.com/log/filelogger from tailscale.com/ipn/ipnserver
|
||||||
tailscale.com/log/logheap from tailscale.com/control/controlclient
|
tailscale.com/log/logheap from tailscale.com/control/controlclient
|
||||||
tailscale.com/logpolicy from tailscale.com/cmd/tailscaled
|
tailscale.com/logpolicy from tailscale.com/cmd/tailscaled+
|
||||||
tailscale.com/logtail from tailscale.com/logpolicy
|
tailscale.com/logtail from tailscale.com/control/controlclient+
|
||||||
tailscale.com/logtail/backoff from tailscale.com/control/controlclient+
|
tailscale.com/logtail/backoff from tailscale.com/control/controlclient+
|
||||||
tailscale.com/logtail/filch from tailscale.com/logpolicy
|
tailscale.com/logtail/filch from tailscale.com/logpolicy
|
||||||
tailscale.com/metrics from tailscale.com/derp
|
tailscale.com/metrics from tailscale.com/derp
|
||||||
tailscale.com/net/dnscache from tailscale.com/control/controlclient+
|
tailscale.com/net/dnscache from tailscale.com/control/controlclient+
|
||||||
tailscale.com/net/flowtrack from tailscale.com/wgengine/filter+
|
tailscale.com/net/flowtrack from tailscale.com/net/packet+
|
||||||
💣 tailscale.com/net/interfaces from tailscale.com/cmd/tailscaled+
|
💣 tailscale.com/net/interfaces from tailscale.com/cmd/tailscaled+
|
||||||
tailscale.com/net/netcheck from tailscale.com/wgengine/magicsock
|
tailscale.com/net/netcheck from tailscale.com/wgengine/magicsock
|
||||||
tailscale.com/net/netns from tailscale.com/control/controlclient+
|
tailscale.com/net/netns from tailscale.com/control/controlclient+
|
||||||
@ -100,18 +100,18 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
tailscale.com/net/stun from tailscale.com/net/netcheck+
|
tailscale.com/net/stun from tailscale.com/net/netcheck+
|
||||||
tailscale.com/net/tlsdial from tailscale.com/control/controlclient+
|
tailscale.com/net/tlsdial from tailscale.com/control/controlclient+
|
||||||
tailscale.com/net/tsaddr from tailscale.com/ipn/ipnlocal+
|
tailscale.com/net/tsaddr from tailscale.com/ipn/ipnlocal+
|
||||||
💣 tailscale.com/net/tshttpproxy from tailscale.com/control/controlclient+
|
💣 tailscale.com/net/tshttpproxy from tailscale.com/cmd/tailscaled+
|
||||||
tailscale.com/paths from tailscale.com/cmd/tailscaled+
|
tailscale.com/paths from tailscale.com/cmd/tailscaled+
|
||||||
tailscale.com/portlist from tailscale.com/ipn/ipnlocal
|
tailscale.com/portlist from tailscale.com/ipn/ipnlocal
|
||||||
tailscale.com/safesocket from tailscale.com/ipn/ipnserver
|
tailscale.com/safesocket from tailscale.com/ipn/ipnserver
|
||||||
tailscale.com/smallzstd from tailscale.com/ipn/ipnserver+
|
tailscale.com/smallzstd from tailscale.com/ipn/ipnserver+
|
||||||
tailscale.com/syncs from tailscale.com/net/interfaces+
|
tailscale.com/syncs from tailscale.com/net/interfaces+
|
||||||
tailscale.com/tailcfg from tailscale.com/control/controlclient+
|
tailscale.com/tailcfg from tailscale.com/cmd/tailscaled+
|
||||||
W tailscale.com/tsconst from tailscale.com/net/interfaces
|
W tailscale.com/tsconst from tailscale.com/net/interfaces
|
||||||
tailscale.com/tstime from tailscale.com/wgengine/magicsock
|
tailscale.com/tstime from tailscale.com/wgengine/magicsock
|
||||||
tailscale.com/types/empty from tailscale.com/control/controlclient+
|
tailscale.com/types/empty from tailscale.com/control/controlclient+
|
||||||
tailscale.com/types/flagtype from tailscale.com/cmd/tailscaled
|
tailscale.com/types/flagtype from tailscale.com/cmd/tailscaled
|
||||||
tailscale.com/types/key from tailscale.com/derp+
|
tailscale.com/types/key from tailscale.com/cmd/tailscaled+
|
||||||
tailscale.com/types/logger from tailscale.com/cmd/tailscaled+
|
tailscale.com/types/logger from tailscale.com/cmd/tailscaled+
|
||||||
tailscale.com/types/netmap from tailscale.com/control/controlclient+
|
tailscale.com/types/netmap from tailscale.com/control/controlclient+
|
||||||
tailscale.com/types/nettype from tailscale.com/wgengine/magicsock
|
tailscale.com/types/nettype from tailscale.com/wgengine/magicsock
|
||||||
@ -122,7 +122,7 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
tailscale.com/types/strbuilder from tailscale.com/net/packet
|
tailscale.com/types/strbuilder from tailscale.com/net/packet
|
||||||
tailscale.com/types/structs from tailscale.com/control/controlclient+
|
tailscale.com/types/structs from tailscale.com/control/controlclient+
|
||||||
tailscale.com/types/wgkey from tailscale.com/control/controlclient+
|
tailscale.com/types/wgkey from tailscale.com/control/controlclient+
|
||||||
tailscale.com/util/dnsname from tailscale.com/wgengine/tsdns+
|
tailscale.com/util/dnsname from tailscale.com/ipn/ipnstate+
|
||||||
LW tailscale.com/util/endian from tailscale.com/net/netns+
|
LW tailscale.com/util/endian from tailscale.com/net/netns+
|
||||||
tailscale.com/util/lineread from tailscale.com/control/controlclient+
|
tailscale.com/util/lineread from tailscale.com/control/controlclient+
|
||||||
tailscale.com/util/pidowner from tailscale.com/ipn/ipnserver
|
tailscale.com/util/pidowner from tailscale.com/ipn/ipnserver
|
||||||
@ -133,7 +133,7 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
tailscale.com/wgengine from tailscale.com/cmd/tailscaled+
|
tailscale.com/wgengine from tailscale.com/cmd/tailscaled+
|
||||||
tailscale.com/wgengine/filter from tailscale.com/control/controlclient+
|
tailscale.com/wgengine/filter from tailscale.com/control/controlclient+
|
||||||
tailscale.com/wgengine/magicsock from tailscale.com/cmd/tailscaled+
|
tailscale.com/wgengine/magicsock from tailscale.com/cmd/tailscaled+
|
||||||
💣 tailscale.com/wgengine/monitor from tailscale.com/wgengine+
|
💣 tailscale.com/wgengine/monitor from tailscale.com/cmd/tailscaled+
|
||||||
tailscale.com/wgengine/netstack from tailscale.com/cmd/tailscaled
|
tailscale.com/wgengine/netstack from tailscale.com/cmd/tailscaled
|
||||||
tailscale.com/wgengine/router from tailscale.com/cmd/tailscaled+
|
tailscale.com/wgengine/router from tailscale.com/cmd/tailscaled+
|
||||||
tailscale.com/wgengine/router/dns from tailscale.com/ipn/ipnlocal+
|
tailscale.com/wgengine/router/dns from tailscale.com/ipn/ipnlocal+
|
||||||
@ -180,7 +180,7 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
golang.org/x/text/transform from golang.org/x/text/secure/bidirule+
|
golang.org/x/text/transform from golang.org/x/text/secure/bidirule+
|
||||||
golang.org/x/text/unicode/bidi from golang.org/x/net/idna+
|
golang.org/x/text/unicode/bidi from golang.org/x/net/idna+
|
||||||
golang.org/x/text/unicode/norm from golang.org/x/net/idna
|
golang.org/x/text/unicode/norm from golang.org/x/net/idna
|
||||||
golang.org/x/time/rate from tailscale.com/types/logger+
|
golang.org/x/time/rate from gvisor.dev/gvisor/pkg/tcpip/stack+
|
||||||
bufio from compress/flate+
|
bufio from compress/flate+
|
||||||
bytes from bufio+
|
bytes from bufio+
|
||||||
compress/flate from compress/gzip+
|
compress/flate from compress/gzip+
|
||||||
@ -227,12 +227,12 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
hash from compress/zlib+
|
hash from compress/zlib+
|
||||||
hash/adler32 from compress/zlib
|
hash/adler32 from compress/zlib
|
||||||
hash/crc32 from compress/gzip+
|
hash/crc32 from compress/gzip+
|
||||||
hash/fnv from tailscale.com/wgengine/magicsock+
|
hash/fnv from gvisor.dev/gvisor/pkg/tcpip/network/ipv6+
|
||||||
hash/maphash from go4.org/mem
|
hash/maphash from go4.org/mem
|
||||||
html from net/http/pprof+
|
html from net/http/pprof+
|
||||||
io from bufio+
|
io from bufio+
|
||||||
io/fs from crypto/rand+
|
io/fs from crypto/rand+
|
||||||
io/ioutil from github.com/godbus/dbus/v5+
|
io/ioutil from crypto/x509+
|
||||||
log from expvar+
|
log from expvar+
|
||||||
math from compress/flate+
|
math from compress/flate+
|
||||||
math/big from crypto/dsa+
|
math/big from crypto/dsa+
|
||||||
|
@ -35,6 +35,8 @@ import (
|
|||||||
"inet.af/netaddr"
|
"inet.af/netaddr"
|
||||||
"tailscale.com/health"
|
"tailscale.com/health"
|
||||||
"tailscale.com/log/logheap"
|
"tailscale.com/log/logheap"
|
||||||
|
"tailscale.com/logpolicy"
|
||||||
|
"tailscale.com/logtail"
|
||||||
"tailscale.com/net/dnscache"
|
"tailscale.com/net/dnscache"
|
||||||
"tailscale.com/net/netns"
|
"tailscale.com/net/netns"
|
||||||
"tailscale.com/net/tlsdial"
|
"tailscale.com/net/tlsdial"
|
||||||
@ -390,6 +392,36 @@ func (c *Direct) doLogin(ctx context.Context, t *oauth2.Token, flags LoginFlags,
|
|||||||
c.logf("RegisterReq: got response; nodeKeyExpired=%v, machineAuthorized=%v; authURL=%v",
|
c.logf("RegisterReq: got response; nodeKeyExpired=%v, machineAuthorized=%v; authURL=%v",
|
||||||
resp.NodeKeyExpired, resp.MachineAuthorized, resp.AuthURL != "")
|
resp.NodeKeyExpired, resp.MachineAuthorized, resp.AuthURL != "")
|
||||||
|
|
||||||
|
if resp.Login.LoginName != persist.LoginName {
|
||||||
|
// rotate log id here
|
||||||
|
newPrivateID, err := logtail.NewPrivateID()
|
||||||
|
if err != nil {
|
||||||
|
return false, "", fmt.Errorf("new log ID generation issue: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
newPublicID := newPrivateID.Public()
|
||||||
|
c.logf("switching to log id %s", newPublicID)
|
||||||
|
cfgPath, oldc, err := logpolicy.LoadConfig()
|
||||||
|
if err != nil {
|
||||||
|
return false, "", fmt.Errorf("can't load old log config file: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
oldPublicID := oldc.PublicID
|
||||||
|
oldc.PrivateID = newPrivateID
|
||||||
|
oldc.PublicID = newPublicID
|
||||||
|
err = oldc.Save(cfgPath)
|
||||||
|
if err != nil {
|
||||||
|
return false, "", fmt.Errorf("can't save log config to %q: %v", cfgPath, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// XXX(Xe): Overwrite log.Output to the new log id, the other middleware
|
||||||
|
// inbetween this will be maintained, this just overrides what log.Printf
|
||||||
|
// gets put to. This modifies global state.
|
||||||
|
logpolicy.New("tailnode.log.tailscale.io")
|
||||||
|
|
||||||
|
c.logf("continuing from log ID %s", oldPublicID)
|
||||||
|
}
|
||||||
|
|
||||||
if resp.NodeKeyExpired {
|
if resp.NodeKeyExpired {
|
||||||
if regen {
|
if regen {
|
||||||
return true, "", fmt.Errorf("weird: regen=true but server says NodeKeyExpired: %v", request.NodeKey)
|
return true, "", fmt.Errorf("weird: regen=true but server says NodeKeyExpired: %v", request.NodeKey)
|
||||||
|
@ -24,6 +24,7 @@ import (
|
|||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"golang.org/x/term"
|
"golang.org/x/term"
|
||||||
@ -65,7 +66,7 @@ func (c *Config) ToBytes() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Save writes the JSON representation of c to stateFile.
|
// Save writes the JSON representation of c to stateFile.
|
||||||
func (c *Config) save(stateFile string) error {
|
func (c *Config) Save(stateFile string) error {
|
||||||
c.PublicID = c.PrivateID.Public()
|
c.PublicID = c.PrivateID.Public()
|
||||||
if err := os.MkdirAll(filepath.Dir(stateFile), 0750); err != nil {
|
if err := os.MkdirAll(filepath.Dir(stateFile), 0750); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -308,6 +309,40 @@ func tryFixLogStateLocation(dir, cmdname string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LoadConfig loads the logging configuration that is currently in use.
|
||||||
|
// This is intended for use outside of this package.
|
||||||
|
func LoadConfig() (string, *Config, error) {
|
||||||
|
dir := logsDir(log.Printf)
|
||||||
|
cmdName := version.CmdName()
|
||||||
|
tryFixLogStateLocation(dir, cmdName)
|
||||||
|
|
||||||
|
cfgPath := filepath.Join(dir, fmt.Sprintf("%s.log.conf", cmdName))
|
||||||
|
|
||||||
|
// The Windows service previously ran as tailscale-ipn.exe, so
|
||||||
|
// let's keep using that log base name if it exists.
|
||||||
|
if runtime.GOOS == "windows" && cmdName == "tailscaled" {
|
||||||
|
const oldCmdName = "tailscale-ipn"
|
||||||
|
oldPath := filepath.Join(dir, oldCmdName+".log.conf")
|
||||||
|
if fi, err := os.Stat(oldPath); err == nil && fi.Mode().IsRegular() {
|
||||||
|
cfgPath = oldPath
|
||||||
|
cmdName = oldCmdName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var result Config
|
||||||
|
fin, err := os.Open(cfgPath)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("can't open %q: %w", cfgPath, err)
|
||||||
|
}
|
||||||
|
defer fin.Close()
|
||||||
|
err = json.NewDecoder(fin).Decode(&result)
|
||||||
|
if err != nil {
|
||||||
|
return "", nil, fmt.Errorf("can't decode log config at %q: %w", cfgPath, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return cfgPath, &result, nil
|
||||||
|
}
|
||||||
|
|
||||||
// New returns a new log policy (a logger and its instance ID) for a
|
// New returns a new log policy (a logger and its instance ID) for a
|
||||||
// given collection name.
|
// given collection name.
|
||||||
func New(collection string) *Policy {
|
func New(collection string) *Policy {
|
||||||
@ -381,7 +416,7 @@ func New(collection string) *Policy {
|
|||||||
}
|
}
|
||||||
newc.PublicID = newc.PrivateID.Public()
|
newc.PublicID = newc.PrivateID.Public()
|
||||||
if newc != *oldc {
|
if newc != *oldc {
|
||||||
if err := newc.save(cfgPath); err != nil {
|
if err := newc.Save(cfgPath); err != nil {
|
||||||
earlyLogf("logpolicy.Config.Save: %v", err)
|
earlyLogf("logpolicy.Config.Save: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -415,6 +450,12 @@ func New(collection string) *Policy {
|
|||||||
log.SetFlags(0) // other logflags are set on console, not here
|
log.SetFlags(0) // other logflags are set on console, not here
|
||||||
log.SetOutput(lw)
|
log.SetOutput(lw)
|
||||||
|
|
||||||
|
lastLogLevelMu.Lock()
|
||||||
|
if lastLogLevel != -1 {
|
||||||
|
lw.SetVerbosityLevel(lastLogLevel)
|
||||||
|
}
|
||||||
|
lastLogLevelMu.Unlock()
|
||||||
|
|
||||||
log.Printf("Program starting: v%v, Go %v: %#v",
|
log.Printf("Program starting: v%v, Go %v: %#v",
|
||||||
version.Long,
|
version.Long,
|
||||||
goVersion(),
|
goVersion(),
|
||||||
@ -433,12 +474,20 @@ func New(collection string) *Policy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
lastLogLevelMu sync.Mutex
|
||||||
|
lastLogLevel int = -1
|
||||||
|
)
|
||||||
|
|
||||||
// SetVerbosityLevel controls the verbosity level that should be
|
// SetVerbosityLevel controls the verbosity level that should be
|
||||||
// written to stderr. 0 is the default (not verbose). Levels 1 or higher
|
// written to stderr. 0 is the default (not verbose). Levels 1 or higher
|
||||||
// are increasingly verbose.
|
// are increasingly verbose.
|
||||||
//
|
//
|
||||||
// It should not be changed concurrently with log writes.
|
// It should not be changed concurrently with log writes.
|
||||||
func (p *Policy) SetVerbosityLevel(level int) {
|
func (p *Policy) SetVerbosityLevel(level int) {
|
||||||
|
lastLogLevelMu.Lock()
|
||||||
|
lastLogLevel = level
|
||||||
|
lastLogLevelMu.Unlock()
|
||||||
p.Logtail.SetVerbosityLevel(level)
|
p.Logtail.SetVerbosityLevel(level)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user