From a78eeecb5682b30fe98541f112e09d27204a10e2 Mon Sep 17 00:00:00 2001 From: Devin Carr Date: Tue, 8 Sep 2026 17:11:49 -0700 Subject: [PATCH] chore: Cleanup unused transport log level Remove the unused --transport-loglevel flag and its legacy aliases and environment variables. The dedicated transport logger was never used for log emission, so remove its construction and plumbing through tunnel configuration, the supervisor, and the connection observer. --- cmd/cloudflared/cliutil/logger.go | 8 -------- cmd/cloudflared/flags/flags.go | 3 --- cmd/cloudflared/tunnel/cmd.go | 7 ++----- cmd/cloudflared/tunnel/configuration.go | 4 +--- connection/http2_test.go | 8 ++++---- connection/observer.go | 4 +--- connection/observer_test.go | 16 +++++++++------- connection/quic_connection_test.go | 2 +- logger/create.go | 8 ++------ supervisor/supervisor.go | 5 +---- supervisor/tunnel.go | 1 - supervisor/tunnel_test.go | 2 +- 12 files changed, 22 insertions(+), 46 deletions(-) diff --git a/cmd/cloudflared/cliutil/logger.go b/cmd/cloudflared/cliutil/logger.go index 58f530fe..f734ba20 100644 --- a/cmd/cloudflared/cliutil/logger.go +++ b/cmd/cloudflared/cliutil/logger.go @@ -31,14 +31,6 @@ func ConfigureLoggingFlags(shouldHide bool) []cli.Flag { EnvVars: []string{"TUNNEL_LOGLEVEL"}, Hidden: shouldHide, }), - altsrc.NewStringFlag(&cli.StringFlag{ - Name: flags.TransportLogLevel, - Aliases: []string{"proto-loglevel"}, // This flag used to be called proto-loglevel - Value: "info", - Usage: "Transport logging level(previously called protocol logging level) {debug, info, warn, error, fatal}", - EnvVars: []string{"TUNNEL_PROTO_LOGLEVEL", "TUNNEL_TRANSPORT_LOGLEVEL"}, - Hidden: shouldHide, - }), altsrc.NewStringFlag(&cli.StringFlag{ Name: flags.LogFile, Usage: "Save application log to this file for reporting issues.", diff --git a/cmd/cloudflared/flags/flags.go b/cmd/cloudflared/flags/flags.go index 63f6434a..fd34d3f0 100644 --- a/cmd/cloudflared/flags/flags.go +++ b/cmd/cloudflared/flags/flags.go @@ -135,9 +135,6 @@ const ( // LogLevelSSH is the command line flag for the cloudflared ssh logging level LogLevelSSH = "log-level" - // TransportLogLevel is the command line flag for the transport logging level - TransportLogLevel = "transport-loglevel" - // LogFile is the command line flag to define the file where application logs will be stored LogFile = "logfile" diff --git a/cmd/cloudflared/tunnel/cmd.go b/cmd/cloudflared/tunnel/cmd.go index 4abd9bcc..2f15e13e 100644 --- a/cmd/cloudflared/tunnel/cmd.go +++ b/cmd/cloudflared/tunnel/cmd.go @@ -113,7 +113,6 @@ var ( "proxy-address", "proxy-port", cfdflags.LogLevel, - cfdflags.TransportLogLevel, cfdflags.LogFile, cfdflags.LogDirectory, cfdflags.TraceOutput, @@ -397,9 +396,7 @@ func StartServer( return fmt.Errorf("namedTunnel is nil") } - logTransport := logger.CreateTransportLoggerFromContext(c, logger.EnableTerminalLog) - - observer := connection.NewObserver(log, logTransport) + observer := connection.NewObserver(log) // Send Quick Tunnel URL to UI if applicable quickTunnelURL := namedTunnel.QuickTunnelUrl @@ -407,7 +404,7 @@ func StartServer( observer.SendURL(quickTunnelURL) } - tunnelConfig, orchestratorConfig, err := prepareTunnelConfig(ctx, c, info, log, logTransport, observer, namedTunnel) + tunnelConfig, orchestratorConfig, err := prepareTunnelConfig(ctx, c, info, log, observer, namedTunnel) if err != nil { log.Err(err).Msg("Couldn't start tunnel") return err diff --git a/cmd/cloudflared/tunnel/configuration.go b/cmd/cloudflared/tunnel/configuration.go index cdae8339..a28b7558 100644 --- a/cmd/cloudflared/tunnel/configuration.go +++ b/cmd/cloudflared/tunnel/configuration.go @@ -46,7 +46,6 @@ var ( flags.Retries, flags.Protocol, flags.LogLevel, - flags.TransportLogLevel, flags.OriginCert, flags.Metrics, flags.MetricsUpdateFreq, @@ -114,7 +113,7 @@ func prepareTunnelConfig( ctx context.Context, c *cli.Context, info *cliutil.BuildInfo, - log, logTransport *zerolog.Logger, + log *zerolog.Logger, observer *connection.Observer, namedTunnel *connection.TunnelProperties, ) (*supervisor.TunnelConfig, *orchestration.Config, error) { @@ -235,7 +234,6 @@ func prepareTunnelConfig( LBPool: c.String(flags.LBPool), Tags: tags, Log: log, - LogTransport: logTransport, Observer: observer, ReportedVersion: info.Version(), // Note TUN-3758 , we use Int because UInt is not supported with altsrc diff --git a/connection/http2_test.go b/connection/http2_test.go index 324577ff..644938b6 100644 --- a/connection/http2_test.go +++ b/connection/http2_test.go @@ -33,7 +33,7 @@ func newTestHTTP2Connection() (*HTTP2Connection, net.Conn) { edgeConn, cfdConn := net.Pipe() connIndex := uint8(0) log := zerolog.Nop() - obs := NewObserver(&log, &log) + obs := NewObserver(&log) controlStream := NewControlStream( obs, mockConnectedFuse{}, @@ -363,7 +363,7 @@ func TestServeControlStream(t *testing.T) { unregistered: make(chan struct{}), } - obs := NewObserver(&log, &log) + obs := NewObserver(&log) controlStream := NewControlStream( obs, mockConnectedFuse{}, @@ -417,7 +417,7 @@ func TestFailRegistration(t *testing.T) { unregistered: make(chan struct{}), } - obs := NewObserver(&log, &log) + obs := NewObserver(&log) controlStream := NewControlStream( obs, mockConnectedFuse{}, @@ -466,7 +466,7 @@ func TestGracefulShutdownHTTP2(t *testing.T) { events := &eventCollectorSink{} shutdownC := make(chan struct{}) - obs := NewObserver(&log, &log) + obs := NewObserver(&log) obs.RegisterSink(events) controlStream := NewControlStream( obs, diff --git a/connection/observer.go b/connection/observer.go index 7e63cb3d..eab712e3 100644 --- a/connection/observer.go +++ b/connection/observer.go @@ -20,7 +20,6 @@ const ( type Observer struct { log *zerolog.Logger - logTransport *zerolog.Logger metrics *tunnelMetrics tunnelEventChan chan Event addSinkChan chan EventSink @@ -30,10 +29,9 @@ type EventSink interface { OnTunnelEvent(event Event) } -func NewObserver(log, logTransport *zerolog.Logger) *Observer { +func NewObserver(log *zerolog.Logger) *Observer { o := &Observer{ log: log, - logTransport: logTransport, metrics: newTunnelMetrics(), tunnelEventChan: make(chan Event, observerChannelBufferSize), addSinkChan: make(chan EventSink, observerChannelBufferSize), diff --git a/connection/observer_test.go b/connection/observer_test.go index b5ea41b0..c06491bf 100644 --- a/connection/observer_test.go +++ b/connection/observer_test.go @@ -1,6 +1,7 @@ package connection import ( + "runtime" "strconv" "sync" "testing" @@ -9,22 +10,23 @@ import ( "github.com/prometheus/client_golang/prometheus" dto "github.com/prometheus/client_model/go" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestSendUrl(t *testing.T) { - observer := NewObserver(&log, &log) + observer := NewObserver(&log) observer.SendURL("my-url.com") - assert.Equal(t, 1.0, getCounterValue(t, observer.metrics.userHostnamesCounts, "https://my-url.com")) + assert.InEpsilon(t, 1.0, getCounterValue(t, observer.metrics.userHostnamesCounts, "https://my-url.com"), 0.001) observer.SendURL("https://another-long-one.com") - assert.Equal(t, 1.0, getCounterValue(t, observer.metrics.userHostnamesCounts, "https://another-long-one.com")) + assert.InEpsilon(t, 1.0, getCounterValue(t, observer.metrics.userHostnamesCounts, "https://another-long-one.com"), 0.001) } func getCounterValue(t *testing.T, metric *prometheus.CounterVec, val string) float64 { var m = &dto.Metric{} err := metric.WithLabelValues(val).Write(m) - assert.NoError(t, err) + require.NoError(t, err) return m.Counter.GetValue() } @@ -59,16 +61,16 @@ func TestRegisterServerLocation(t *testing.T) { id := strconv.Itoa(i) assert.Equal(t, "AUS", m.oldServerLocations[id]) } - } func TestObserverEventsDontBlock(t *testing.T) { - observer := NewObserver(&log, &log) + observer := NewObserver(&log) var mu sync.Mutex observer.RegisterSink(EventSinkFunc(func(_ Event) { // callback will block if lock is already held mu.Lock() - mu.Unlock() + defer mu.Unlock() + runtime.Gosched() })) timeout := time.AfterFunc(5*time.Second, func() { diff --git a/connection/quic_connection_test.go b/connection/quic_connection_test.go index 1542b707..8e6e57c1 100644 --- a/connection/quic_connection_test.go +++ b/connection/quic_connection_test.go @@ -225,7 +225,7 @@ func TestControlStreamClassifiesDuplicateRegistration(t *testing.T) { shouldFail: errors.New(DuplicateConnectionError), } controlStream := NewControlStream( - NewObserver(&log, &log), + NewObserver(&log), mockConnectedFuse{}, &TunnelProperties{}, 0, diff --git a/logger/create.go b/logger/create.go index 2ae67ab9..bd4356d9 100644 --- a/logger/create.go +++ b/logger/create.go @@ -128,10 +128,6 @@ func newZerolog(loggerConfig *Config) *zerolog.Logger { return &log } -func CreateTransportLoggerFromContext(c *cli.Context, disableTerminal bool) *zerolog.Logger { - return createFromContext(c, cfdflags.TransportLogLevel, cfdflags.LogDirectory, disableTerminal) -} - func CreateLoggerFromContext(c *cli.Context, disableTerminal bool) *zerolog.Logger { return createFromContext(c, cfdflags.LogLevel, cfdflags.LogDirectory, disableTerminal) } @@ -216,7 +212,7 @@ func createFileWriter(config FileConfig) (io.Writer, error) { fullpath := config.Fullpath() // Try to open the existing file - logFile, err := os.OpenFile(fullpath, os.O_APPEND|os.O_WRONLY, filePermMode) + logFile, err := os.OpenFile(fullpath, os.O_APPEND|os.O_WRONLY, filePermMode) //nolint:gosec // Log file path is provided by the configured FileConfig. if err != nil { // If the existing file wasn't found, or couldn't be opened, just ignore // it and recreate a new one. @@ -246,7 +242,7 @@ func createDirFile(config FileConfig) (io.Writer, error) { mode := os.FileMode(filePermMode) fullPath := filepath.Join(config.Dirname, config.Filename) - logFile, err := os.OpenFile(fullPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, mode) + logFile, err := os.OpenFile(fullPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, mode) //nolint:gosec // Log file path is constructed from the configured FileConfig. if err != nil { return nil, fmt.Errorf("unable to create a new logfile: %s", err) } diff --git a/supervisor/supervisor.go b/supervisor/supervisor.go index 3923fefd..b2c19e79 100644 --- a/supervisor/supervisor.go +++ b/supervisor/supervisor.go @@ -8,7 +8,6 @@ import ( "github.com/prometheus/client_golang/prometheus" "github.com/quic-go/quic-go" - "github.com/rs/zerolog" "github.com/cloudflare/cloudflared/connection" "github.com/cloudflare/cloudflared/edgediscovery" @@ -41,8 +40,7 @@ type Supervisor struct { nextConnectedIndex int nextConnectedSignal chan struct{} - log *ConnAwareLogger - logTransport *zerolog.Logger + log *ConnAwareLogger gracefulShutdownC <-chan struct{} } @@ -100,7 +98,6 @@ func NewSupervisor(config *TunnelConfig, orchestrator *orchestration.Orchestrato tunnelsConnecting: map[int]chan struct{}{}, tunnelsProtocolFallback: map[int]*protocolFallback{}, log: log, - logTransport: config.LogTransport, gracefulShutdownC: gracefulShutdownC, }, nil } diff --git a/supervisor/tunnel.go b/supervisor/tunnel.go index a7c5e7ec..01cca579 100644 --- a/supervisor/tunnel.go +++ b/supervisor/tunnel.go @@ -53,7 +53,6 @@ type TunnelConfig struct { LBPool string Tags []pogs.Tag Log *zerolog.Logger - LogTransport *zerolog.Logger Observer *connection.Observer ReportedVersion string Retries uint diff --git a/supervisor/tunnel_test.go b/supervisor/tunnel_test.go index 015822ca..66229c54 100644 --- a/supervisor/tunnel_test.go +++ b/supervisor/tunnel_test.go @@ -280,7 +280,7 @@ func (s *scriptedTunnelServer) Serve(_ context.Context, _ uint8, _ *protocolFall func newTestSupervisor(t *testing.T, server TunnelServer) *Supervisor { t.Helper() log := zerolog.Nop() - observer := connection.NewObserver(&log, &log) + observer := connection.NewObserver(&log) tracker := tunnelstate.NewConnTracker(&log) connAwareLogger := NewConnAwareLogger(&log, tracker, observer)